如何打破每个循环的async.js?
嗨,我使用node.js的async模块异步实现for循环。如何打破每个循环的async.js?
我的问题是:如何打破循环执行,并得到了循环?我试过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); }
);
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);
}
);
PS:如果你不这样做异步,使用underscore
你能告诉我如何在这里做到这一点?我不能在'return false'的地方调用'callback(1)''我已经在代码中显示并打破它的行 – mithunsatheesh 2013-02-18 15:10:43
@mithunsatheesh简短的回答:你必须,而且你可以。 – Chad 2013-02-18 15:21:26
而不是返回false,只需执行“return callback({data:false})”并检查最终回调中的第一个参数。 – AndyD 2013-02-25 04:11:53
您可以在回调的第一个参数发送的东西(这'async'将解释为打破一个“错误”并停止循环)。将它作为一个已知值(a * truthy * one),您可以在最终回调中检查它是否是中断而不是错误。 – Chad 2013-02-18 14:54:54
你能告诉我如何在这里做到这一点?我不能在'return false'的地方调用'callback(1)''我在代码中显示并打破它的行 – mithunsatheesh 2013-02-18 15:11:21
如果你没有在所有路径中调用回调,那么循环永远不会“结束”。如果你有一条路径没有调用回调,那么你做错了。这是异步的,你的返回值什么也不做。 – Chad 2013-02-18 15:21:08