gpt4 book ai didi

javascript - 数组函数中的 Async/Await reduce

转载 作者:行者123 更新时间:2023-11-29 11:03:20 30 4
gpt4 key购买 nike

我有 2 个代码片段(并行、顺序)在一个带有 reduce 的数组上执行一个简单的异步函数。我不明白,为什么直到我调用 Promise.all 才开始执行。这是最好的方法吗?

// Function returning promise with root value
async function proot(x) {
return new Promise((res,rej)=>{
setTimeout( () => {
console.log(x*x);
res(x*x)
},1000)
})
}

// Parallel Execution
var arr1 = [2,3,4].reduce((prev,next)=>{
return prev.concat(proot(next))
},[])
arr1 = await Promise.all(arr1)

// Sequential Execution
var arr2 = [2,3,4].reduce( async (prev,next)=>{
return (await prev).concat(await proot(next))
},Promise.resolve([]))
arr2 = await Promise.all([arr2])

最佳答案

当您调用返回 promise 的函数时,promise 中的代码将被执行:

// Parallel Execution
var arr1 = [2,3,4].reduce((prev,next)=>{
return prev.concat(proot(next))
},[])

但它返回一个 promise 而不是一个值。您将需要处理 promise 以获得它解析的值。

您不需要使用 reduce。 map 将适用于您的情况:

var arr = [2,3,4].map((n) => proot(n));
Promise.all(arr).then((values) => {})

或者:

var arr = [2,3,4].map(async (n) => await proot(n));

关于javascript - 数组函数中的 Async/Await reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43413948/

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