我正在努力改善一些性能问题,为此我尝试执行以下
我有一个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((and
valueA,valueB,valueCare the resolved results from the other promises passed to the outer
Promise.al((`。因此,只要你准备好这样组织结果,你当然可以这样做。
你也可以把结果压平,然后做这样的事情:
const [processA, processB, processC, ...promiseResults] = await Promise.all([
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
...promiseResults
]);
这将为您提供一个单一的组合和平面结果数组,然后您可以根据自己的意愿分配或访问这些结果。所以,这实际上只是取决于你希望结果如何组织。
我还没有使用过这样的构造,但如果你不喜欢它,你可以将你的promise.all包装在另一个promise中,这样它就不会嵌套promise-all。