在node.js中管理嵌套的异步foreach循环

时间:2016-03-03 16:38:24

标签: node.js asynchronous synchronization

传统上,在同步语言中,诸如有条件地退出两个嵌套的foreach循环之类的任务将是一项简单的任务,例如:

return new Promise(resolve, reject){
  AnArray.forEach(anElement){
      ACONSTANTARRAY.forEach(ACONSTANTELEMENT){
          if(anElement === ACONSTANTELEMENT){
              resolve(bar);
          }
      }
  }
  resolve(foo);
}

但是,因为foo会立即解决,处理这种情况的最佳方法是什么?我是否必须将其转换为多个Promise.all(array.map(function(){})来电?看起来丑陋,过于复杂,难以理解。

1 个答案:

答案 0 :(得分:1)

很抱歉,您不喜欢它,但如果您需要等待所有异步操作完成后才能使用Promise.all

return Promise.all(AnArray.map(anElement =>
   new Promise((resolve, reject) => {
      if (ACONSTANTARRAY.find(ACONSTANTELEMENT => ACONSTANTELEMENT === anElement)) {
        return resolve(bar);
      }
      reject(foo);
   });
);

以上并没有做任何异步的事情。请记住,有许多异步库可以为您创建承诺,因此您甚至根本不需要new Promise。您仍然需要使用Promise.all,但是如果您需要等待多个承诺来解决。

您还可以考虑使用类似enter image description here的内容来处理基于生成器的控制流,以便为您处理承诺数组。