在node.js中pipe理嵌套的asynchronousforeach循环

传统上,在同步语言中,诸如具有两个嵌套的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(){})调用吗?看起来丑陋,过于复杂,难以理解。

对不起,你不喜欢它,但是如果你需要等待所有的asynchronous操作完成后才能继续,你必须使用Promise.all

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

上面没有做任何asynchronous,但。 请记住,有很多asynchronous库为你创build承诺,所以你甚至可能根本不需要做new Promise 。 你仍然需要使用Promise.all ,尽pipe如果你需要等待多个promise来解决。

你也可以考虑使用像co这样的基于生成器的控制stream来处理承诺数组。