2017-08-06 20 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"](); 
    }; 

質問です:ここでは

は私のコードを見てのこれまでのところは何ですか。約束の中から解決値を返すには?

答えて

3

ここで戻り値を使用することはできません。promise resolve関数を使用して、データベースから呼び出し元に行を戻します。

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

非同期コードから返すことはできません。ログに記録しようとすると結果が準備できず、プログラムは次の行に進みます。約束が既に解決されているときに、「その時」にそれを記録することができます。 –