节点.js MYSQL,在前一个查询完成后按顺序运行每个查询

Node.js MYSQL to run each Queries sequencially after previous one is done?

本文关键字:查询 运行 顺序 一个 MYSQL js 节点      更新时间:2023-09-26

我正在使用来自Node的Javascript MYSQL库.js然后我有多个查询要循环运行。但是当我运行循环时,the loop总是突然到达结束(完成),而它启动的查询仍在处理中。那么如何保持循环以等待每个查询完成,然后正常继续呢?

我的代码是:

function startHere() {
    console.log("-- START --");
    for (i=1; i < 6; i++) {
        dbInsert(i);
    }
    console.log("-- END --");
}
function dbInsert(id) {
    connection.query (
        'INSERT INTO table SET data=?',
        [id],
        function selectCb(err, results, fields) {
            if (err) {
                console.log(err.message);
            }
            if (results.length > 0) {
                console.log(id+" RECORDS ADDED!");
            }
        }
    );
}
startHere();

当我运行它时,它总是返回如下:

-- START --
-- END --
1 RECORDS ADDED!
2 RECORDS ADDED!
3 RECORDS ADDED!
4 RECORDS ADDED!
5 RECORDS ADDED!

这意味着,循环不会等待它启动的查询结束。
如何检测查询的端点并使其正常工作?

您的 selectCb 方法未被同步调用,因此您的循环有效地触发了每个调用,然后返回。

您可以检查文档中是否有该 connection.query 方法的同步版本,或者您需要创建一个回调以在所有插入触发后打印结束消息。

async应该适合你

async.series([
    function(){ ... },
    function(){ ... }
]);

请参阅 https://github.com/caolan/async#series