如何打破async.js每个循环?

您好我使用node.js asynchronous模块asynchronous实现for循环。

我的问题是:如何打破循环执行并退出循环? 我试图给予returnreturn 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); } ); 

没有真正的“循环”这样的突破。 你的collections中的所有物品都是并行使用的

“断开”“循环”的唯一方法是用错误参数调用callback。 由于没有什么可以阻止你将其他东西放在那里,所以你可以稍微修改一下。

从文档:

请注意,由于此函数并行地将迭代器应用于每个项目,因此不能保证迭代器函数将按顺序完成。

即使你返回一个错误,你仍然可能有几个未完成的请求,所以你真的想限制一次使用的项目数量。 要限制未完成请求的数量,可以使用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:如果你没有做asynchronous,使用下划线

async.until重复调用函数,直到testing返回true。 所以testing必须返回true,以便退出循环。 这与async.whilst相反,而当testing评估为真时,它会重复运行。

async.each并行调用函数,所以它返回并不重要。 这不是一个你可以打破的循环,而是一个遍历数组的循环。 停止使用async.each条件应该在async.untiltesting中,您应该自己遍历规则。