0

我正在使用来自 Node.js 的 Javascript MYSQL 库,然后我有多个查询要循环运行。但是当我运行循环时,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!

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

4

2 回答 2

0

async应该为你工作

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

https://github.com/caolan/async#series

于 2012-12-11T10:35:21.280 回答
0

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

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

于 2012-06-09T18:16:47.687 回答