gpt4 book ai didi

javascript - 使用异步回调函数迭代 Map 的条目

转载 作者:行者123 更新时间:2023-12-05 03:18:21 27 4
gpt4 key购买 nike

我想迭代 Map 的条目带有异步回调函数。应立即为所有元素启动回调函数。

我最终得到了以下代码,它可以工作但看起来太复杂了:

async function test() {
const map1 = new Map();

map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);

await Promise.all(Array.from(map1.entries()).map(async([
key,
value
]) => {
await doSomeThing(key, value);
await doSomeOtherThing(key, value);
}
}

有没有更简单的方法来实现这一目标?

最佳答案

你可以做一些更短的事情

  • Array.from(map1.entries()) 可以重写为 [...map1]
  • 据我所知,doSomeOtherThing 不依赖于 doSomeThing,因此我们可以同时调用它们两个
await Promise.all(
[...map1].flatMap(([key, val]) => [
doSomeThing(key, val),
doSomeOtherThing(key, val),
])
)

const doSomeThing = (key, val) =>
new Promise(res => {
console.log("doSomeThing start", key, val)
setTimeout(() => {
console.log("doSomeThing finish", key, val)
res()
}, 1000)
})
const doSomeOtherThing = (key, val) =>
new Promise(res => {
console.log("doSomeOtherThing start", key, val)
setTimeout(() => {
console.log("doSomeOtherThing finish", key, val)
res()
}, 2000)
})

async function test() {
const map1 = new Map()

map1.set("a", 1)
map1.set("b", 2)
map1.set("c", 3)

/*
await Promise.all(
Array.from(map1.entries()).map(async ([key, value]) => {
await doSomeThing(key, value)
await doSomeOtherThing(key, value)
})
)
*/

await Promise.all(
[...map1].flatMap(([key, val]) => [
doSomeThing(key, val),
doSomeOtherThing(key, val),
])
)
}

test().then(() => {
console.log("done")
})

关于javascript - 使用异步回调函数迭代 Map 的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73730603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com