javascript - 嵌套的 promise.all
问题描述
我正在尝试改善一些性能问题,为此我尝试执行以下操作
我有一个promises数组,我想在 promises 数组的所有 promises 完成后返回结果。
顺便说一句,processA、processB 和 processC 的结果也很重要,因为在 // 其他逻辑我在某个地方使用它们。
const promiseResults = await Promise.all(promises);
const [processA, processB, processC] = await Promise.all([
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
]);
// other logic
// ....
// ....
return promiseResults;
所以,我想在 promise.all 中添加 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.all()
。这里的一个问题是你的外部Promise.all()
将解析为一个包含嵌入式数组的数组,如下所示:
[[v1, v2, v3], valueA, valueB, valueC]
[v1, v2, v3]
内部解决的结果在哪里Promise.all()
(传递给外部 Promise.all() and
valueA, valueB, valueC are the resolved results from the other promises passed to the outer
Promise.all()`。所以,只要你准备好像这样组织结果,你当然可以这样工作。
您还可以展平结果并执行以下操作:
const [processA, processB, processC, ...promiseResults] = await Promise.all([
asyncProcessForA(),
asyncProcessForB(),
asyncProcessForC(),
...promiseResults
]);
然后,这将为您提供一个组合的扁平结果数组,然后您可以根据需要分配或访问这些结果。因此,这实际上仅取决于您希望如何组织结果。
推荐阅读
- python - 加载单个页面 - Django REST 框架中的权限
- html - 缩小屏幕尺寸时将一个 jumbotron 堆叠在一起
- angular - 角度测试错误:无法解析服务的所有参数:
- java - 如何避免在流中改变对象的状态?
- mouse - 我如何以非阻塞方式读取鼠标数据
- algorithm - 通过改变大小增加动态数组时的摊销运行时间
- node.js - 发布后是否应该从后端返回发布的数据?角度+节点
- python - 在同一图中绘制循环的结果 - 热图
- amazon-web-services - 通过 Nat 网关在私有子网和公共子网之间传递流量
- python - 我的 Django 项目中的“urls.py”文件在哪里?