MySQLでasync/awaitをノードで使用しようとしていますが、毎回未定義の値を返します。理由はありますか?以下の私のコードを見つけてください。
const mysql = require('promise-mysql');
var connection;
const dbConfig = {
Host: "hostname",
database: "dbname",
user: "username",
password: "passwords"
};
async function getResult(){
await mysql.createConnection(dbConfig).then(function(conn){
connection = conn;
var result = connection.query('select height from users where pin=1100');
return result;
}).then(function(rows){
console.log(JSON.parse(JSON.stringify(rows[0].height)));
connection.end();
return rows[0].height;
}).catch(function(error){
if (connection && connection.end) connection.end();
//logs out the error
console.log(error);
});
}
async function queryDb(){
try{
var height = await getResult();
console.log(height);
if(height){
console.log(height)
}
}catch(err){
console.log(err);
console.log('Could not process request due to an error');
return;
}
}
queryDb();
高さはqueryDbで返されると思いますが、値はgetResult関数でのみ表示され、queryDb関数で使用するために返されません。
私はノードが初めてなので、コードが完全ではない可能性があることを知っています。
async function getResult(){
let connection;
try {
connection = await mysql.createConnection(dbConfig);
const result = await connection.query('select height from users where pin=1100');
console.log(result[0].height);
return result[0].height;
} finally {
if (connection && connection.end) connection.end();
}
}
次の問題を修正します。
then
を使用しても意味がありません。stringify
およびparse
を使用する必要はありません。getResult
を呼び出す関数がガベージ/ undefined
を返さないように、実際に再スローする必要があります。再スローする代わりに、成功したかどうかにかかわらず、常に接続を閉じるfinally
ブロックを追加しました。let
およびconst
をサポートする必要があります。 var
より良いです=)