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

joh*_*nny 6 javascript callback node.js

我需要一些关于node.js的异步性质的帮助.我有一个for循环,它从数据库中收集数据."result"是一个数组,然后应该返回到main函数.

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
            }
        });
Run Code Online (Sandbox Code Playgroud)

如何在循环结束后确保回调执行?

250*_*50R 11

您可能需要考虑使用辅助库,如async https://github.com/caolan/async

它有助于保持代码更加一致..

在您的情况下,您可以查看forEach()方法

forEach(arr, iterator, callback)
Run Code Online (Sandbox Code Playgroud)

使用列表中的项目调用迭代器,并在完成时调用它.

查看单元测试以获取示例

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