node.js - nodejs,异步在减少,等待不等待承诺解决
问题描述
我不明白为什么所有的承诺都会在同一时间得到解决。我读到它await
在循环中不能按预期工作forEach
,但它也不能与map
任何一个一起工作
const promise = async (ms, name) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`resolving ${name}`)
resolve(name)
}, ms)
});
}
async function main() {
['foo', 'bar', 'baz'].reduce(async (accum, curr) => {
const res = await promise(1000, curr)
return res
}, Promise.resolve(''))
}
main()
但是 await 在这种情况下可以正常工作:
async function main2() {
const ms = 1000
await promise(ms, "foo")
await promise(ms, "bar")
await promise(ms, "baz")
}
main2()
解决方案
回调的每次迭代reduce
都将同步初始化。在运行回调主体之前,您需要等待上一次迭代中的累加器(幸运的是Promise
已经)解决:reduce
const promise = async (ms, name) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`resolving ${name}`)
resolve(name)
}, ms)
});
}
async function main() {
['foo', 'bar', 'baz'].reduce(async (accum, curr) => {
// don't progress further until the last iteration has finished:
await accum;
const res = await promise(1000, curr)
return res
}, Promise.resolve(''))
}
main()
推荐阅读
- xquery - 在大量文档上执行 XQuery 时扩展的树缓存完全异常
- django - Django:是否可以从另一个网站下载 csv 文件并通过 Django shell 将其添加到 FileField?
- matlab - 绘制按纬度和经度网格化的数据
- jquery - Jquery在快速鼠标移动时出现悬停错误时在div中隐藏和显示内容
- c++ - 如何将动态矩阵复制到 CUDA 中的设备内存?
- python - pip:为什么有时不显示 twine 命令
- java - RemoteMessage.send() 在 Firebase 上触发什么功能?
- java - 多种通用类型
- android - 在 Decoview 中设置 Textview
- asp.net - 实体框架构建器尝试生成表两次