如果条件满足,则完全脱离异步

Break out of async completely if condition met

如何在满足条件时创建 async.each 循环中断和 return 特定值/错误。例如,在这种情况下,如果状态存在,我希望 return 函数 'check' 中的某些内容,而不是遍历其余项目。有什么建议吗?

const check = (condition) => {

    if (condition === 100) {

           async.each(items, (item, callback) => {

               if (status) {

                    callback(Boom.conflict('Conflict'));
                } else {

                    // some logic
                    callback(destroyInstance);
                }
           });
     }
};

这看起来像是这个问题的重复:

Break out of javascript nested async.each loop but continue main loop

看看答案,应该对你有帮助。在那种情况下,它是另一个异步循环中的嵌套异步,但答案应该仍然有效。

编辑:

如该线程中所示但没有额外层的解决方案如下:

async.each(subArray, function(item, callback) {
      if (SOME_CONDITION) {
        // Break out of async
        var err = new Error('Broke out of async');
        err.break = true;
        return callback(err);
      }
      // continue
      callback();

      }, function(err) {
         if (err && err.break) {
            // Handle break out of async here
         } else {
            // Otherwise handle here
         }
      });

As async.each 并行处理项目数组中的每个项目。看起来不可能在任何情况下停止操作,因为项目的执行顺序在这里不确定。我猜你应该改用 async.eachSeries。

因此,只要满足条件,您应该做的就是抛出错误 (return callback(err)),这将停止进一步执行。如果你想发送一些值而不是抛出错误,你可以假装发送一个错误,并在检查 async.eachSeries 的主要回调时检查你从 iteratee 回调中获得的值的类型功能如您所见,例如:

async.eachSeries(items, function iteratee(item, callback) {
  if (status) {
    return callback(E/V); // error(E) or value(V) u want to send to the done function
  } else {
    // some logic
    callback();
  }
 }, function done(e) {
  if(e){
    if(type of e === TYPE OF RETURN VALUE U WANTED) // or any other logic u can come up with
     return cb(null, e);
    else return cb(e);
  }
  else cb(null, //...);
});

告诉我它是否有效。