0

您好我正在尝试使用不同的参数异步运行相同的函数,但无法弄清楚如何存储函数而不在所有承诺之前运行它们。

这是我正在尝试做的一个简化示例:

const myFunc = async(paramsAsArray) => {
    // does stuff
}

let paramArray = [ [a,b], [c, d], [e, f] ]
let funcArray = []

for (let i = 0; i < paramArray.length; i++) {

    funcArray.push(myFunc(paramArray[i]))

}

const response = await Promise.all(funcArray)

在我可以使用 promise.all() 之前,我的函数一直在 for 循环中运行。有谁知道我可以做些什么来让他们全部使用承诺?任何帮助或建议表示赞赏,谢谢!

4

2 回答 2

0

myFunc(paramArray[i])立即调用该函数。您正在调用它,因此您不是将函数本身推送到数组,而是将其返回值。此外,Promise 决议立即开始,而不是在Promise.all.

要推送函数本身而不调用它,并且仍然传递参数,请使用.bind

funcArray.push(myFunc.bind(this, paramArray[i]))

您还可以使用以下方法构建阵列.map()

const funcArray = paramArray.map( params => myFunc.bind(this, params));
于 2022-02-23T15:16:32.713 回答
0

将您的函数包装在另一个函数中,这样它就不会立即被调用。然后在里面调用它Promise.all

funcArray.push(() => myFunc(paramArray[i]))`

const response = await Promise.all(funcArray.map(f=> f()))
于 2022-02-23T15:30:37.043 回答