Nested promise.all



我正在努力改善一些性能问题,为此我尝试执行以下

我有一个promise数组,我想在promise数组中的所有promise完成后返回结果。

顺便说一句,进程A、进程B和进程C的结果也很重要,因为在//其他逻辑中,我在某个地方使用它们。

const promiseResults = await Promise.all(promises);
const [processA, processB, processC] = await Promise.all([
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
]);

// other logic 
// ....
// ....

return promiseResults;

所以,我想在promiseResults中添加promiseResults.所有这些都像

const [promiseResults, processA, processB, processC] = await Promise.all([
Promise.all(promises),
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
]);

// other logic 
// ....
// ....

return promiseResults;

那么,我的方法是好还是坏,还使用嵌套promise。all是好还是不好?因为我搜索了一些使用嵌套promise.all的最佳实践,但我什么都找不到。那么,你提供什么?

使用嵌套的Promise.all(),如第二个示例所示:

const [promiseResults, processA, processB, processC] = await Promise.all([
Promise.all(promises),
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
]);

效果很好。Promise.all()期望一系列承诺。由于Promise.all()返回一个promise,所以在对Promise.all()的另一个调用中使用它的promise是完全可以的。这里的一个问题是,您的外部Promise.all()将解析为一个嵌入数组的数组,如下所示:

[[v1, v2, v3], valueA, valueB, valueC]

其中,[v1, v2, v3]是内部Promise.all()的解析结果(传递到外部Promise.all((andvalueA,valueB,valueCare the resolved results from the other promises passed to the outerPromise.al((`。因此,只要你准备好这样组织结果,你当然可以这样做。


你也可以把结果压平,然后做这样的事情:

const [processA, processB, processC, ...promiseResults] = await Promise.all([
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
...promiseResults
]);

这将为您提供一个单一的组合和平面结果数组,然后您可以根据自己的意愿分配或访问这些结果。所以,这实际上只是取决于你希望结果如何组织。

我还没有使用过这样的构造,但如果你不喜欢它,你可以将你的promise.all包装在另一个promise中,这样它就不会嵌套promise-all。

相关内容

  • 没有找到相关文章

最新更新