【问题标题】:Nested callbacks in a loop循环中的嵌套回调
【发布时间】:2014-08-20 03:05:39
【问题描述】:

我正面临在 Node.JS 中对 mongodb 的嵌套资源访问

我需要访问资源(我们称之为“resource_a”)及其相关的“resource_a”子资源(我们称之为“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":"..."}              
        }
    });
}

【问题讨论】:

    标签: javascript node.js mongodb asynchronous callback


    【解决方案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的调用都会调用它们各自的回调)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2012-12-11
      • 1970-01-01
      • 2017-08-20
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多