0

我正在尝试在 NodeJS 中的循环内编写一个循环,但我有点困惑,结果并没有给我我期望的结果——有时回调会被击中两次,依此类推。我正在使用异步模块,如果有人能告诉我在下面的代码中哪里可能出错,那就太好了。如果有更好的方法可以做到这一点,我会很感激任何提示。

it("should add some numbers", function(done){
    var typed_totals = 0, i = 0;
    async.each(arr1, function(value, callback1){
        var j = 0;
        async.each(arr2, function(element, callback2){
            testFunction(function(result){
                calculate(result, function(total){
                    typed_totals += total;
                    if(++j < arr2.length){
                        callback2();
                    } else if (++i <= arr1.length){
                        callback1();
                    } else {
                        done();
                    }
                });
            });
        });
    });
});

testFunction()在我的情况下,http请求并获得一些值。calculate()从字面上看,只是将其中一些加在一起。

如果有任何不清楚的地方,请发表评论,我会根据需要编辑我的问题。

4

1 回答 1

2

我要去睡觉了,如果您使用更详细的信息进行编辑,我明天可能会提供更具体的答案,这是我的嵌套async.each循环的示例。

var async = require('async');

function addNumbers(arr1, arr2, callback){
  var typed_totals = 0;

  async.each(arr1, iterator1, function(err){
    callback(err, typed_totals);
  });

  function iterator1(val1, done1){
    typed_totals += val1;

    async.each(arr2, iterator2, function(err){
      if(err){ return done1(err) };
      done1(null);
    });

    function iterator2(val2, done2){
      process.nextTick(function(){
        typed_totals += val2;
        done2(null);
      });
    };
  };
};

addNumbers([1,2],[3,4], function(err, total){
  console.log(err, total);
});
于 2013-11-14T03:56:21.850 回答