gpt4 book ai didi

javascript - 使用参数执行 Promise.all

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:53 27 4
gpt4 key购买 nike

我正在尝试创建一个我想实现的 Promises 数组,但不确定如何最好地循环它们。

我认为以下代码可以解决问题,但当我创建 promise 数组时,它出现了,我实际上将它们称为副作用,这不是我想要做的,直到 Promise.all 被命中。

import wait from 'waait'

const main = async () => {
console.log('Start')
const doStuff = async (name) => {
console.log('Do stuff called', name)
await wait(500)
return name + ' is cool'
}


const names = ['Dan', 'Mitchell', 'Josh']

const promises = names.map(name => doStuff(name))

// const data = await Promise.all(promises)
// console.log(data)
console.log('End')
}

main()

我发现最后两行被注释掉了,doStuff 函数似乎被调用了,因为 console.log 正在我的控制台中发生。

我期望在映射中创建的 promise 的行为保持草稿状态,然后在 Promise.all 中调用,但事实并非如此。

有人可以解释并提供关于应该如何完成的解释吗?

最佳答案

promise 在创建时立即开始。没有“start()”方法,因此您所要做的就是确保只在需要时创建 promise 。我会将创建 promise 的调用包装在一个 async 函数中,该函数仅在应创建 promise 时调用,然后在 Promise.all() 上调用 await 在该函数内,如您所愿。

您也可以考虑将 promises 包装在异步函数中并创建一个异步函数数组 - 但您仍然需要遍历该数组并调用每个函数来检索创建的 promises 并等待它们。也许是这样的:

var pending = names.map(n => async ()=>await doStuff(n));  // (warning: untested; off the top of my head)

然后你有一系列包装在函数中的待定 promise 。时机成熟时,您可以使用 var promises = pending.map(f=>f()) 调用函数并创建一个 promises 数组。

关于javascript - 使用参数执行 Promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194720/

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