您好我正在使用node.js的async模块来异步实现for循环。
我的问题是:如何打破循环执行并退出循环?我尝试过return
,return false
,但没有运气。
以下是示例代码:
async.until(
function() { return goal; },
function(callback) {
async.each(_rules,
function(rule,callback) {
var outcome = true;
.... some code ....
if(changes){
console.log("hi");
return false;// HERE I NEED TO BREAK
}
else
callback();
},
function(err){ }
);
if (!changes || session.process)
goal = true;
callback();
},
function(err){ callback(session); }
);
答案 0 :(得分:6)
async.until
重复调用函数,直到测试返回true。因此测试必须返回true才能退出循环。这与async.whilst
相反,async.each
在测试评估为真时重复运行。
async.each
并行调用函数,因此返回的函数无关紧要。它不是一个可以中断的循环,而是循环遍历数组的迭代器。您停止使用async.until
的条件应该是{{1}}的测试,您应该自己重复规则。
答案 1 :(得分:6)
没有真正的“循环”可以突破。您的收藏中的所有商品都是并行使用的
“打破”“循环”的唯一方法是使用错误参数调用回调。因为没有什么可以阻止你把其他东西放在那里你可以稍微破解它。
来自文档:
注意,因为此函数将迭代器应用于每个项目 并行,不能保证迭代器函数会 按顺序完成。
即使您返回错误,您仍然可能会有多个未完成的请求,因此您确实希望限制一次使用的项目数量。要限制未完成的请求数量,可以使用eachSeries或eachLimit。
例如:
async.each(_rules,
function(rule,callback) {
if(changes){
return callback({ data: 'hi'}); // stop
}
...
if(realerror){
return callback({ error: realerror}); // stop with an error
}
callback(); // continue
},
function(result){
if(!result){
return othercallback('no results');
}
// check if we have a real error:
if(result.error){
return othercallback(result.error);
}
return othercallback(null, result.data);
}
);
PS:如果你没有做异步,请使用underscore