在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来处理承诺数组。
- 如何捕捉node.js中同步函数的错误?
- 所有的JavaScriptcallback是asynchronous的吗? 如果没有,我怎么知道哪些是?
- JavaScript同步循环
- 我如何确保在响应传入的请求(Swagger / Express)之前已经返回一个承诺,
- 节点js。 如何在两个函数之间共享数组? 有没有更复杂的方法
- node.js redis同步化
- 在承诺fs.writeFile,asynchronous同步的东西
- 与node.js文件同步:unision == tcp == node —– —– node == tcp == unison
- 如何使用npm synchronize在node.js中的variables中返回callback