Javascript - 将匿名函数传递给 Promise.all

标签 javascript arrays promise axios es6-promise

我正在尝试使用带有 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 返回一个 PromisePromise.all 需要它.怎么样:

Promise.all(array.map(f => f()).then....

这样你的函数就会在你真正需要的时候被调用,map 会给你一个结果数组,也就是一个 Promise 数组。

请注意,这与您在 [getUsers(), getSessions()] 中引用的示例本质上相同——不同之处在于您的函数是匿名的,并且使用 隐式调用map,而不是通过它们的名称明确显示。这样您就可以更灵活地实际调用函数。

关于Javascript - 将匿名函数传递给 Promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49721234/

相关文章:

javascript - HTML Canvas 内容拉伸(stretch)到底部/右侧

javascript - 检查组合链内的字段是否未定义

c - 关于在 C 中使用数组作为指针的问题

java - 无法创建特定对象的数组并且无法正确使用compare to方法

javascript - JS链的 promise 和结果总是得到解决

javascript - console.log() 显示正确的值,但是当将其分配给变量时,它是未定义的 - Angular,firestore

javascript - CSS 过渡动画未应用于内联 svg <text> 但在 <rect> 上它工作正常吗?

javascript - div为 'shown'后才运行Javascript,显示:block

ios - 通过索引从数组中获取对象,即从另一个数组中获取

javascript - 访问 Javascript promise 链中的变量