我有一个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循环。
有人可以帮忙吗?
答案 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);