我正在尝试使用带有 Axios 的 Promise.all 方法同时进行多个 API 调用,基于此示例:
getUsers() {
return axios.get('/users');
}
getSessions() {
return axios.get('/sessions');
}
Promise.all([getUsers(), getSessions()])
.then(results => {
// Use the data
})
.catch(error => {
// Catch the error
});
但是,由于我只会根据 promise 链中先前 API 调用的结果知道在此阶段需要进行哪些并发 API 调用,因此我尝试将匿名函数数组传递给该函数形式为:
var array = [];
array.push(() => {return axios.get('/users')});
array.push(() => {return axios.get('/sessions')});
Promise.all(array).then....
这是行不通的,我知道这是因为我传递的是函数对象,而不是像方法期望的那样引用实际的 Promise 对象。但是,仅将 axios.get(...) 方法推送到数组会导致立即调用它们,而不是稍后执行 Promise.all 方法时调用。
我不确定如何正确地做到这一点,或者是否有更好的方法来实现我所追求的...
最佳答案
我不熟悉 Axios,但如果我理解正确的话,axios.get
返回一个 Promise
,Promise.all
需要它.怎么样:
Promise.all(array.map(f => f()).then....
这样你的函数就会在你真正需要的时候被调用,map
会给你一个结果数组,也就是一个 Promise
数组。
请注意,这与您在 [getUsers(), getSessions()]
中引用的示例本质上相同——不同之处在于您的函数是匿名的,并且使用 隐式调用map
,而不是通过它们的名称明确显示。这样您就可以更灵活地实际调用函数。
关于Javascript - 将匿名函数传递给 Promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49721234/