私はJavascriptとnode.jsでかなり新しく、これを動作させるにはいくつか問題があります。私が知る限り、これは期待される結果を生み出すはずですが、私はいくつかむしろ奇妙な出力を持っています(cf.コメント参照)。親スコープの変数は子スコープ内で変更できません
function getHistoryFromDb() {
var rows=1;
pool.getConnection(function (err, connection) {
// rows = 1
console.log(rows);
connection.query('SELECT * FROM messages', function (error, results, fields) {
connection.release();
if (error) throw error;
// rows = 1
rows = results;
// rows = the expected output (array of objects)
});
});
// rows = 1
return rows;
}
ありがとうございました!
EDIT:それは実行が非同期 EDIT2ているにリンクされている多くの問題だように見える:問題、解決の代わりにリターンを使用しようとしているのコールバックを使用していた...
を使用する必要があり、その行の値がまだ初期値です。値を返す代わりに、関数はパラメータとしてコールバックを受け入れ、結果とともに呼び出す必要があります。 –
これはスコープとは関係がありません。非同期関数から値を取得することと関連があります –
行 'rows = results;の前に' console.log() 'コールを置き、' return rows; 。次に、呼び出しが行われる順序を調べます。それは何が起こっているのか理解するのに役立ちます。 '行'への代入の前に戻り呼び出しが起こっています。 – RJM