Javascript 如果满足条件,则完全断开异步

Javascript 如果满足条件,则完全断开异步,javascript,node.js,hapijs,Javascript,Node.js,Hapijs,如何使async.each循环中断,并在满足条件时返回特定值/错误。例如,在本例中,如果状态存在,我希望从函数“check”返回一些内容,而不是遍历其余的项。有什么建议吗 const check = (condition) => { if (condition === 100) { async.each(items, (item, callback) => { if (status) {

如何使async.each循环中断,并在满足条件时返回特定值/错误。例如,在本例中,如果状态存在,我希望从函数“check”返回一些内容,而不是遍历其余的项。有什么建议吗

const check = (condition) => {

    if (condition === 100) {

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

               if (status) {

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

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

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

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

编辑:

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

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
         }
      });

async.each在items数组中的每个项上并行工作。看起来在任何情况下都不可能停止操作,因为此处项的执行顺序不确定。我想您应该改用async.eachSeries

因此,每当满足条件时,您应该做的是抛出一个错误返回callbackerr,它将停止进一步执行。如果您想发送一些值而不是抛出和error,您可以假装发送一个错误,在检查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, //...);
});

告诉我它是否有效

您需要在check函数中有一个回调参数,这样您就可以使用hapi的处理程序进行回复。很高兴听到这个消息!请将此标记为答案,以便其他人也可以使用。我将继续并在这里添加另一个问题的解决方案,因为它与该问题略有不同。