mit*_*esh 9 javascript loops callback node.js
您好我正在使用node.js的异步模块来异步实现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); }
);
Run Code Online (Sandbox Code Playgroud)
async.until重复调用函数,直到测试返回true.因此测试必须返回true才能退出循环.async.whilst当测试评估为真时,这反复运行.
async.each并行调用函数,因此返回的函数无关紧要.它不是一个可以中断的循环,而是循环遍历数组的迭代器.您的停止使用条件async.each应该在测试中async.until,您应该自己迭代规则.
实际上没有一个"循环"可以突破.您收藏的所有物品都是并行使用的
"中断"循环的唯一方法是使用错误参数调用回调.因为没有什么可以阻止你把其他东西放在那里你可以破解它一点点.
来自文档:
注意,由于此函数并行地将迭代器应用于每个项目,因此无法保证迭代器函数将按顺序完成.
即使您返回错误,您仍然可能会有多个未完成的请求,因此您确实希望限制一次使用的项目数量.要限制未完成的请求数量,可以使用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);
}
);
Run Code Online (Sandbox Code Playgroud)
PS:如果你没有做异步,请使用下划线
| 归档时间: |
|
| 查看次数: |
16866 次 |
| 最近记录: |