[英]Callback after ForEach (with async function inside) is done
我有一个带有异步功能的.forEach循环,并且我的代码在循环结束之前正在执行我的callback()。
有没有一种方法可以使它完成循环,然后继续执行我的callback()。
这是我的代码:
var transactions = [];
t.transactions.forEach(function(id){
client.query('SELECT * FROM transactions WHERE id = $1;', [id], function(err, result) {
if(!err){
transactions.push({from : result.rows[0].from, to : result.rows[0].to, amount : result.rows[0].amount, time : result.rows[0].ct, message : result.rows[0].message, id : result.rows[0].id});
}
});
});
callback(transactions);
return done();
使用forEach的index参数测试您是否正在进行最后一个事务:
var transactions = [];
t.transactions.forEach(function(id, idx){
client.query('SELECT * FROM transactions WHERE id = $1;', [id], function(err, result) {
if(!err){
transactions.push({from : result.rows[0].from, to : result.rows[0].to, amount : result.rows[0].amount, time : result.rows[0].ct, message : result.rows[0].message, id : result.rows[0].id});
}
// If this is the last transaction, do the callback
if(idx === t.transactions.length - 1) callback(transactions);
});
});
由于每个事务只有一个查询,因此可以将测试放入查询的回调中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.