我有一个带有异步函数的.forEach循环,我的代码在循环结束前执行我的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();
答案 0 :(得分:1)
使用forEach的索引参数来测试您是否参与了最后一笔交易:
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);
});
});
由于您每个交易只有一个查询,因此您可以将测试置于查询的回调中。