我需要有关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 } });
如何确保循环完成后执行回调?
您可能要考虑使用帮助程序库,例如 异步 https://github.com/caolan/async
它有助于使代码更加一致。
就您而言,您可以查看forEach()方法
forEach(arr, iterator, callback)
调用迭代器时,将使用列表中的项目以及完成时的回调。
查看单元测试的示例
https://github.com/caolan/async/blob/master/mocha_test/each.js