繁体   English   中英

ForEach(内部具有异步功能)完成后的回调

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM