Javascript 如何中断async.js每个循环?
嗨,我正在使用node.js模块异步实现for循环 我的问题是:如何中断循环执行并退出循环?我试着给出Javascript 如何中断async.js每个循环?,javascript,node.js,loops,callback,Javascript,Node.js,Loops,Callback,嗨,我正在使用node.js模块异步实现for循环 我的问题是:如何中断循环执行并退出循环?我试着给出返回,返回错误,但没有运气 以下是示例代码: async.until( function() { return goal; }, function(callback) { async.each(_rules, function(rule,callback) { var outcome = tru
返回
,返回错误
,但没有运气
以下是示例代码:
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); }
);
async.till
反复调用函数,直到测试返回true。所以测试必须返回true,以便退出循环。这与async.while相反,后者在测试结果为true时重复运行
async。每个
并行调用函数,因此返回什么并不重要。它不是一个可以中断的循环,而是一个在数组上循环的迭代器。停止使用async的条件。每个都应该进行async测试。直到为止,您应该自己迭代规则。实际上没有这样的“循环”可以打破。您的收藏中的所有物品都被并行使用
“中断”循环的唯一方法是使用错误参数调用回调。因为没有什么可以阻止你把其他东西放进去,你可以稍微修改一下
从文档中:
请注意,由于此函数将迭代器应用于
并行迭代器函数不能保证
按顺序完成
即使您返回一个错误,您仍可能有几个未完成的请求,因此您确实希望限制一次性使用的项目数量。要限制未完成请求的数量,可以使用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:如果您没有执行异步,请使用您可以通过在回调的第一个参数中发送某些内容来中断(该参数将被async
解释为“错误”并停止循环)。让它成为一个已知值(真实值),您可以在最后的回调中检查它,以知道它是中断而不是错误。您能告诉我如何在这里执行此操作吗?我不能在返回false的位置调用回调(1)
代码>我在代码中显示的行并中断它如果您没有在所有路径中调用回调,那么循环将永远不会“结束”。如果您有一个路径没有调用回调,那么您就做错了。这是异步的,您的返回值不起任何作用。您能告诉我如何在这里执行此操作吗?我不能在返回false的位置调用回调(1)
代码>我在代码和中断中显示的行it@mithunsatheesh简短回答:你必须这样做,是的,你可以。不要返回false,只需执行“returncallback({data:false})”并检查最终回调中的第一个参数。没有解决我的问题,但启发我尝试另一种方法。