Javascript 什么';在NodeJS和Mocha中,在循环中循环的最佳方式是什么?
我试图在NodeJS中的一个循环中编写一个循环,但我有点困惑,结果并没有给出我所期望的结果——有时回调会被命中两次,以此类推。我使用的是异步模块,如果有人能告诉我下面代码中可能出现的错误,那就太好了。如果有更好的方法,我会很感激任何提示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){
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我的错误更新答案。