一尘不染

在node.js中for循环完成后的回调

node.js

我需要有关node.js异步特性的帮助。我有一个for循环,该循环从数据库收集数据。“结果”是一个数组,然后应将其返回到主函数。

user_collection.findOne({
            _id : uid
        }, function(error, user) {
            if(error)
                callback(error)
            else {
                for(var j = 0; j < user.contacts.length; j++) {
                    if(user.contacts[j].accepted == 'true') {
                        user_collection.findOne({
                            _id : user.contacts[j].contactId
                        }, function(error, user) {
                            result.push(user);
                        })
                    } 
                }
                callback(null, result);  // This callback executes before the for-loop ends, ofc
            }
        });

如何确保循环完成后执行回调?


阅读 337

收藏
2020-07-07

共1个答案

一尘不染

您可能要考虑使用帮助程序库,例如 异步
https://github.com/caolan/async

它有助于使代码更加一致。

就您而言,您可以查看forEach()方法

forEach(arr, iterator, callback)

调用迭代器时,将使用列表中的项目以及完成时的回调。

查看单元测试的示例

https://github.com/caolan/async/blob/master/mocha_test/each.js

2020-07-07