簡體   English   中英

無法從節點中的 sql 查詢中獲取變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM