我在Node.JS中面对这个嵌套资源访问mongodb
我需要访问资源(让我们调用" resource_a")及其相关的子资源" resource_a" (让我们来电话#34; resource_b")。 我为每个resource_a都有一组resource_b。
上面的代码无效,因为它在第一次迭代时调用了回调。 所有resourceB调用一解决,就会调用回调的最佳选择是什么? 谢谢, 弗朗
function someFunction(err, callback){
resourceA.find({}, function(err, resources_a){
for(var resource in resources_a) {
resourceB.find({"resourceA_Id":resources[resource]._id}, function(err, resources_b){
// here some operation
callback(null, {"result":"..."}
}
});
}
答案 0 :(得分:1)
您需要等到所有异步子循环都完成。
通常这是通过使用调用流程库(例如https://github.com/caolan/async)来完成的。
你可以将自己的个人快速和肮脏的加入'这样的操作:
function someFunction(err, callback){
resourceA.find({}, function(err, resources_a){
var waiting = resources_a.length;
for(var resource in resources_a) {
resourceB.find({"resourceA_Id":resources[resource]._id}, function(err, resources_b){
// here some operation
waiting--;
if (waiting == 0) {
callback(null, {"result":"..."}
}
}
});
}
(请注意,这还没有经过测试,当resource_a为空时并没有处理这种情况,并且对所有对resourceB的调用都将调用它们各自的回调这一事实持乐观态度)