如何等待异步完成 - NodeJs
问题描述:
我正在使用异步来执行第二个数据库查询。该查询的结果必须作为对象添加到第一个查询中。如何等待异步完成 - NodeJs
问题是,当异步结束时,数据没有改变,因为他已经发送了未改变的数据。有没有办法等待异步完成?
我已经使用了超时,但数据的大小是未知的,所以这不是一个好的解决方案。
至今代码:
connection.query('SELECT * FROM SENSORS', function(err,rows) {
if(rows.length !== 0) {
DEBUG_WRITE('sensor/','GET',200);
async.eachSeries(rows, function(row, callback) {
connection.query('SELECT * FROM LOCATIONS WHERE LocationID=?',row.LocationID, function (error, result) {
row.location = result;
callback(null,rows);
});
});
res.status(200);
res.send(rows);
} else {
DEBUG_WRITE('sensor','GET',404);
res.status(404);
res.send({status: "No entries found"});
}
});
答
eachSeries
需要一个功能,基本上是一个 “我完了” 功能:
connection.query('SELECT * FROM SENSORS', function(err,rows) {
if(rows.length !== 0) {
DEBUG_WRITE('sensor/','GET',200);
async.eachSeries(rows, function(row, callback) {
connection.query('SELECT * FROM LOCATIONS WHERE LocationID=?',row.LocationID, function (error, result) {
row.location = result;
callback(null,rows);
});
}, function(err){ //treat this as "i'm done iterating"
// if any of the iterations produced an error, err will equal that error
if(err) {
//do something with the error
res.status(500);
return res.send(err);
}
res.status(200);
return res.send(rows);
});
} else {
DEBUG_WRITE('sensor','GET',404);
res.status(404);
res.send({status: "No entries found"});
}
});
See here - 这是一样each
所以function
是相同
哇,那工作。谢谢,实际上这很容易。 – woutergoku