我對Javascript和node.js來說很新,而且在解決這個問題時遇到了一些麻煩。據我所知,這應該產生預期的結果,但我有一些相當奇怪的輸出(參見評論)。父範圍變量不能在子範圍內被修改
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;
}
感謝您的幫助!
編輯:看起來像多掛的執行是異步的, EDIT2一個問題:問題解決了,只好用的,而不是試圖用回報回調...
當函數返回時,它還沒有完成getconnection()和connection.query()的回調,所以行中的值仍然是初始值。您的函數不應該返回值,而應該接受一個回調作爲參數,並用結果調用它。 –
這與範圍無關,它更多的是從異步函數獲取值 –
在行'rows = results;'之前放置一個'console.log()'調用,並且在'return rows'行之前放一個' 。然後查看電話發生的順序。這應該有助於你理解發生了什麼。返回調用在分配給「rows」之前發生。 – RJM