使用动态生成的参数用函数调用promise.all



你好,我正在尝试使用不同的参数异步运行同一个函数,但如果不在promise all之前运行这些函数,就无法确定如何存储这些函数。

以下是我尝试做的事情的一个简化示例:

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循环中运行。有人知道我能做些什么让它们使用promise-all运行吗?感谢您的帮助或建议!

将函数封装在另一个函数中,这样就不会立即调用它。然后在Promise.all内部调用

funcArray.push(() => myFunc(paramArray[i]))
const response = await Promise.all(funcArray.map(f=> f()))

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

要在不调用函数的情况下推送函数本身,并仍然传递它的参数,请使用.bind:

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

您也可以使用.map():构建阵列

const funcArray = paramArray.map( params => myFunc.bind(this, params));

相关内容

  • 没有找到相关文章

最新更新