首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何中断async.js each循环?

如何中断async.js each循环?
EN

Stack Overflow用户
提问于 2013-02-18 22:52:04
回答 2查看 20.1K关注 0票数 9

您好,我正在使用node.js的async模块异步实现一个for循环。

我的问题是:如何打破循环执行并走出循环?我试着给returnreturn false,但是没有运气。

以下是示例代码:

代码语言:javascript
复制
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); }     
);
EN

回答 2

Stack Overflow用户

发布于 2013-02-18 22:57:29

async.until反复调用函数,直到测试返回true。所以test必须返回true才能退出循环。这与async.whilst相反,后者在测试结果为真时重复运行。

async.each并行调用这些函数,因此它返回的内容无关紧要。它不是一个可以中断的循环,而是一个遍历数组的迭代器。停止使用async.each的条件应该在针对async.until的测试中,并且您应该自己迭代规则。

票数 7
EN

Stack Overflow用户

发布于 2013-02-18 23:06:11

并不是真的有“循环”可以打破。集合中的所有项都是并行使用的

“中断”“循环”的唯一方法是使用错误参数调用回调。因为没有什么可以阻止你把其他东西放在里面,你可以稍微修改一下。

从文档中:

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

即使你返回一个错误,你仍然可能有几个未完成的请求,所以你真的想一次性限制你使用的项目的数量。要限制未完成请求的数量,可以使用eachSeries或eachLimit。

例如:

代码语言:javascript
复制
    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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14939050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档