我正在使用异步来执行第二个数据库查询。该查询的结果必须作为对象添加到第一个查询中。
问题是,当异步完成时,数据没有改变,因为他已经发送了未更改的数据。有没有办法等待异步完成?
我使用了超时,但数据的大小未知,因此这不是一个好的解决方案。
到目前为止的代码:
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
相同,因此功能
是相同的
关于sql - 如何等待异步完成 - NodeJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264240/