2017-08-06 58 views
0

我正在与承诺,或至少尝试。JavaScript的MySQL和承诺

这里是我的代码看起来是迄今:

checkEmailUsername = function(mail, user) { 
    return new Promise(function(resolve, reject) { 
     var query; 
     query = "SELECT * FROM users WHERE email = ? OR username = ?"; 
     return connection.query(query, [mail, user], function(err, row, fields) { 
     if (err) { 
      reject(err); 
     } 
     console.log(row.length); 
     if (row.length > 0) { 
      return resolve(true); 
     } else { 
      return resolve(false); 
     } 
     }); 
    }).then()["catch"](); 
    }; 

问题。如何从promise中返回解析值?

回答

3

您不能在这里使用return,使用promise解析函数将db中的行返回给调用者。

checkEmailUsername = function (mail, user) { 
     return new Promise(function (resolve, reject) { 
      var query; 
      query = "SELECT * FROM users WHERE email = ? OR username = ?"; 
      connection.query(query, [mail, user], function (err, row, fields) { 
       if (err) { 
        reject(err); 
       } 
       console.log(row.length); 
       resolve(row); 
      }); 
     }; 

     checkEmailUsername(mail, user).then(function (rows) { 
      // do something with the rows 
     }).catch((err) => { 
      //handle error 
     } 
+0

为什么我不能console.log checkEmailUsername返回?现在我从内部返回值.then()函数 – GreetingsFriend

+0

您不能从异步代码返回事物,当您尝试记录日志时结果尚未准备好,并且程序继续到下一行。当承诺已经解决时,您可以在'当时'内登录。 –