我正在努力改进一些性能问题,为此,我尝试做以下工作
我有一个承诺数组,在承诺数组完成所有承诺之后,我想返回结果。
顺便说一句,processA、processB和processC的结果也很重要,因为在//其他逻辑中,我在某个地方使用了它们。
const promiseResults = await Promise.all(promises);
const [processA, processB, processC] = await Promise.all([
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
]);
// other logic
// ....
// ....
return promiseResults;所以,我想在promiseResults中添加promise.all,就像
const [promiseResults, processA, processB, processC] = await Promise.all([
Promise.all(promises),
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
]);
// other logic
// ....
// ....
return promiseResults;那么,我的方式是好还是坏,同时也使用嵌套promise.all是一个好的或不?因为我搜索了一些使用嵌套promise.all的最佳实践,但是我找不到任何这样的东西,那么您提供什么呢?
发布于 2020-09-07 03:34:51
使用嵌套的Promise.all(),如第二个示例所示:
const [promiseResults, processA, processB, processC] = await Promise.all([
Promise.all(promises),
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
]);效果很好。Promise.all()期望得到一系列的承诺。因为Promise.all()返回一个承诺,所以在另一个对Promise.all()的调用中使用它的诺言是非常好的。这里的一个优点是,您的外部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.all()‘)。所以,只要你为这样的结果做好准备,你当然可以这样做。
您还可以将结果扁平化,并执行如下操作:
const [processA, processB, processC, ...promiseResults] = await Promise.all([
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
...promiseResults
]);然后,这将给您一个组合的和平面的结果数组,然后您可以分配出或访问任何您想要的结果。所以,这真的取决于你想要怎样组织结果。
发布于 2020-09-06 21:13:09
我没有使用过这样的结构,但是如果您不喜欢它,您可以将您的promise.all封装在另一个承诺中,所以它不会是嵌套的所有。
https://stackoverflow.com/questions/63768748
复制相似问题