javascript - 如何将循环等待转换为 Promise.all?
问题描述
我正在转换一位同事的一些旧代码,我对 Javascript 并不陌生,但我很生疏,而且我对 Promises、Map 和其他新的 JS 功能不熟悉。
我需要将带有 a 的循环for
转换为可用于更大 Promise 链的循环。await
Promise
我认为答案是Promise.all
和 a Map / Stream / Reduce
(我仍在学习这是为了什么),但我看过的所有媒体文章都没有得到很好的解释(而且我可能不知道要搜索的正确内容)。
这是我正在转换的代码:
//foos and bars are global and can be used in the `then` after this promise resolves,
// so what the promise returns is unimportant
for (let bar of bars) {
foos[bar] = await new MyClass(bar).myAsyncOperation();
}
如何转换循环,以便在循环中的所有项目都完成之前,promise 不会解决?
另外,我应该转换myAsyncOperation
为返回 Promise 还是可以/应该将其保留为异步函数?
解决方案
Promise.all
是要走的路:
Promise.all(bars
.map(foo => new MyClass(foo).myAsyncOperation()))
.then(results => {
console.log(results)
}
);
推荐阅读
- azure-devops - 如何使用环境使用 Azure DevOps Pipelines 机器文件复制?
- python - 从同步(标准)函数运行的 asyncio
- swift - VoiceOver 在集合视图中导航时选择多个项目,而不仅仅是一个
- c# - 是否可以覆盖 DebuggerBrowsable 属性
- reactjs - 如何从 Reactjs 中的子组件更改父组件的状态?
- javascript - Dexie:如何按日期查询?
- java - 有没有办法在不创建 Activity 的情况下在 Android 中处理 Intent?
- python - 如何在pyvista中填充两个网格作为填充单元格/网格之间的距离?
- python - 如何比较具有不同索引的两个数据帧,并打印出重复的行?
- python - 如何在循环中创建按钮列表时将不同的参数传递给函数