Nodejs 等待 for 循环完成 mysql 查询

Nodejs wait for a for loop to finish with mysql query

我有一个 sql 查询,我在 nodejs 中使用 node-mysql 库执行该查询。

我想 运行 对查询结果进行 for 循环,如下所示:

sql.query(query, function(err, rows, field){
if (err) throw err;
for(var i = 0; i < rows.length; i++) {
    do_something_complicated();
}
}

我尝试使用异步库并将 sql.query() 放在第一个函数中,将我的其余代码放在第二个函数中,但它等待查询完成而不是 for 循环。

有人可以帮忙吗?

尝试使用异步库及其 each 函数。

sql.query(query, function(err, rows, field) {
    if (err) throw err;
    async.each(rows, function(row, callback) {
        do_something_complicated();
        // once finished call the callback
        // no arguments or null if successful, else with the error
        callback();
    }, function(err) {
        // handle errors and do something after each row has been iterated
    }
}

如果您需要 key/index,请改用 forEachOf

实际上您的代码看起来不错,for 循环之后的所有内容都应该在查询和循环完成之后执行。完整语句之后的所有内容都会立即执行,因为 sql.query 函数是异步的。试试下面的异步实现,它应该工作得很好:

async.waterfall([
    async.apply(sql.query, query),
    function(rows, field, callback){
        for(var i = 0; i < rows.length; i++) {
            do_something_complicated();
        }

        callback(null); // This is important, call callback after you are done with everything and pass null for the error parameter
    }
],
function(err){
    if(err) throw err;

    // Everything is executed by now
}