Nodejs等待for循环完成mysql查询

时间:2016-03-23 13:30:26

标签: mysql node.js asynchronous synchronous

我有一个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循环。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

尝试使用异步库及其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
    }
}

如果您需要密钥/索引,请使用forEachOf

答案 1 :(得分:0)

实际上你的代码看起来很好,在for循环之后的所有内容都应该在两者之后执行,查询和循环完成。完整语句之后的所有内容都会立即执行,因为sql.query函数是异步的。通过尝试异步提供以下实现,它应该可以正常工作:

String fieldName = "trialEmbedded";
List<ODocument> fieldDataItem = doc.getData().field(fieldName);

DataItem di = DataItemFactory.create(dtValidita, importo, descrizione, db);

if (fieldDataItem == null) {
    fieldDataItem = new ArrayList<ODocument>();
}
fieldDataItem.add(di.getData());
doc.setField(fieldName, fieldDataItem);