你好,我正在尝试使用不同的参数异步运行同一个函数,但如果不在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));