您好,我正在使用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); }
);发布于 2013-02-18 22:57:29
async.until反复调用函数,直到测试返回true。所以test必须返回true才能退出循环。这与async.whilst相反,后者在测试结果为真时重复运行。
async.each并行调用这些函数,因此它返回的内容无关紧要。它不是一个可以中断的循环,而是一个遍历数组的迭代器。停止使用async.each的条件应该在针对async.until的测试中,并且您应该自己迭代规则。
发布于 2013-02-18 23:06:11
并不是真的有“循环”可以打破。集合中的所有项都是并行使用的
“中断”“循环”的唯一方法是使用错误参数调用回调。因为没有什么可以阻止你把其他东西放在里面,你可以稍微修改一下。
从文档中:
请注意,由于此函数并行地将迭代器应用于每个项目,因此不能保证迭代器函数将按顺序完成。
即使你返回一个错误,你仍然可能有几个未完成的请求,所以你真的想一次性限制你使用的项目的数量。要限制未完成请求的数量,可以使用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
https://stackoverflow.com/questions/14939050
复制相似问题