[英]Cannot get variable from sql query in Node
抱歉,我閱讀了有關處理異步函數以從中獲取變量名的信息,但我不確定我做錯了什么以及如何處理它。
for(let j = 0; j < ga.length; j++) {
var sql = "SELECT * FROM matches WHERE clh = '"+ga[j]+"'"
const dbq = db.query(sql, function(err, result) {
if (err) console.log(err);
var gs1 = 0;
var gs2 = 0;
var pts1 = 0;
var w1 = 0;
var d1 = 0;
var l1 = 0;
for (let i = 0; i < result.length; i++) {
gs1 += result[i].gsh;
gs2 += result[i].gsa;
const r = mgs1(result[i].gsh, result[i].gsa);
if (r == 3) w1 += 1;
if (r == 1) d1 += 1;
if (r == 0) l1 += 1;
var gd1 = gs1 - gs2;
var r1 = [result[i].clh, result.length, w1, d1, l1, gs1, gs2, gd1 ];
}
gs4.push(r1);
if (gs4.length == 6) {
return gs4;
}
})
}
}
這個 function 返回我想要的數組,但我不確定如何在 db.query 塊之外訪問它。 我閱讀了有關從異步函數處理變量的帖子,但在這個示例中我似乎無法做到這一點。 非常感謝提前
我猜你已經在你沒有向我們展示的代碼中的某個地方定義了const gs4 = []
。 這是您問題答案的一部分:它將在您從db.query()
的回調完成后填充。
答案的 rest:直到回調完成后才會填充。 此外,回調內部的return
是沒有意義的; 它只是返回到db.query()
。
此外, db.query()
會立即返回給它的調用者,早在它調用它的回調之前。 因此,您的循環嘗試同時運行多個查詢。 我猜gs4
中的結果會累積所有查詢的結果。
恕我直言,我相信 Promises 或async / await
的學習曲線將在不久的將來快速躍升。
這可能會有所幫助: node.js mysql 在 for 循環中查詢
如果您想以正確的方式查詢數據庫,您應該使用數據庫驅動程序附帶的嵌入式功能。 用於字符串插值並為您的函數返回數據。
exports.lookupLogin = (req, res, next) => {
let sql = 'SELECT e.employee_id, e.login, e.password FROM employee e WHERE e.login=?';
postgres.client.query(sql, [req.body.login], (error, result, fields) => {
if (err) {
return res.status(500).json({ errors: ['Could not do login'] });
}
res.status(200).json(result.rows);
});
};
有關更多信息,您可以查看mysql 文檔以與 nodejs 一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.