Javascript 什么';在NodeJS和Mocha中,在循环中循环的最佳方式是什么?

Javascript 什么';在NodeJS和Mocha中,在循环中循环的最佳方式是什么?,javascript,node.js,asynchronous,callback,mocha.js,Javascript,Node.js,Asynchronous,Callback,Mocha.js,我试图在NodeJS中的一个循环中编写一个循环,但我有点困惑,结果并没有给出我所期望的结果——有时回调会被命中两次,以此类推。我使用的是异步模块,如果有人能告诉我下面代码中可能出现的错误,那就太好了。如果有更好的方法,我会很感激任何提示 it("should add some numbers", function(done){ var typed_totals = 0, i = 0; async.each(arr1, function(value, callback1){

我试图在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();
                    }
                });
            });
        });
    });
});
it(“应该添加一些数字”),函数(完成){
var-U总计=0,i=0;
async.each(arr1,函数(value,callback1){
var j=0;
async.each(arr2,函数(元素,回调2){
testFunction(函数(结果){
计算(结果、功能)(总计){
键入的_总计+=总计;
if(++j}否则,如果(++i我要睡觉了,如果你编辑更详细的信息,我明天可能会提供更具体的答案,下面是一个示例,说明我嵌套的
async。每个
循环都是什么样子

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);
});

什么是
arr1
,什么是
arr2
,什么是
testFunction
,什么是
calculate
,什么是
loop
,你希望代码做什么?这两个循环真的是异步的吗?顺便说一句,你从来都不会调用
callback1
,所以不管内部混乱发生了什么,你永远都不会通过ode>arr1[0]
作为
value
进入第一个
async的迭代器函数。每个
(尽管您可能会调用最外层的回调,
done
。您甚至可能会多次调用它,具体取决于内部代码的操作。通常,您会等待调用最外层的回调,直到最外层的
async的完成回调。每个
都会执行。但您不会为
async.eac定义完成回调h
call。)@Plato我的错误更新答案。