我正在用Node.js構建一個小型報表工具,我正面臨着一些Javascript的範圍問題。我正在調用一個函數,它應該從數據庫查詢中返回一個包含城市的數組。這裏的功能。Js函數返回undefined
function queryBuilderZone() {
var includedCities = new Array();
q = heredoc(function(){/*
SELECT majlis.MajlisId
FROM majlis
WHERE majlis.ZoneId = -ZONE-
*/});
q = q.replace(/-ZONE-/g, inZone);
connection.query(q, function(err, rows, fields) {
if (err) throw err;
var rowsLentgh = rows.length;
for (var i = 0; i < rowsLentgh; i++) {
includedCities.unshift(rows[i].MajlisId);
};
console.log(includedCities); // <-- output correct: ['...', '....']
});
connection.end();
console.log(includedCities); // <-- output wrong: []
return includedCities;
}
這是主程序
includedCities = queryBuilderZone();
console.log(includedCities); // <-- output wrong: []
我的電話在哪裏的問題,這是爲什麼不函數返回數組includedCities
中的元素?
而在connection.query
的範圍內,它顯示正確和預期的值。
順便說一下,我使用mysql
模塊來構建查詢並替換查詢中的佔位符。
標準異步情況。在回調完成之前,您的「錯誤」控制檯日誌發生了嗎?而「includeCities」是你的函數的一個局部變量。 – npup
在我看來,這是一個範圍界定問題。我不是node.js人員,但includeCities在queryBuilderZone函數中定義,該函數不在全局範圍內。將其移到全局範圍的函數上方。 –
@rontornambe這是一個非常典型的node.js初學者問題,他們沒有找到時間閱讀一個小教程。 – hgoebl