【问题标题】:Get Values from array of resolved Promises从已解决的 Promise 数组中获取值
【发布时间】:2018-03-15 04:43:07
【问题描述】:

我正在使用 axios.all 通过一组项目调用循环并为每个项目发出获取请求,以便我可以以正确的顺序保存它们的数据。现在我有一个 Promise 数组,所有这些都用正确的数据解析,并且所有这些都完成时的回调函数被触发。

现在我只需要遍历 Promises 并保存它们的值,但我不知道如何访问它们的值!

let promises = [];

for (let report of response.data.res.body.result) {
    let dto2 = {
        customerId: state.member.customerId,
        reportToken: report.reportToken
    }

    promises.push(axios.post('http://localhost:3001/api/pullReport', dto2));
}
console.log("promises", promises);

axios.all(promises).then(function() {
    console.log("done!");
    promises.forEach(function(res) {
        console.log("res", res);
        // commit('SAVE_REPORT', res.value);
    })
    // resolve('Reports saved.');
});

这是每个 Promise 在 forEach 循环中被安慰时的样子:

__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: Object <<<<<<<<<<< NEED THIS

我只需要能够使用 PromiseValue 对象调用 commit('SAVE_REPORT'),但我不知道要传入什么!我试过 res.value、res.val、res.promiseValue……这有什么秘密吗?

【问题讨论】:

  • 大多数 Promise 库将每个响应(按照它们被调用的顺序——而不是它们返回的顺序)发送到解析回调。您可以通过说 .then(function([res1, res2, res3, etc.]) 来解构,或者您可以通过说 .then(function(responses) 将它们全部捕获到一个数组中
  • console.log(util.inspect(res)) 得到什么?

标签: javascript asynchronous promise axios


【解决方案1】:

axios.all 创建一个新的 Promise,它将使用结果数组进行解析。因此,要与这些结果进行交互,您只需在 .then 块中为函数添加一个参数:

axios.all(promises).then(function(results) {
    results.forEach(function(res) {
        commit('SAVE_REPORT', res.value);
    });
});

【讨论】:

  • 考虑改用Promise.all,因为axios.all 似乎要弃用了。
  • 也切换到 Promise.all。谢谢:)
猜你喜欢
  • 2019-04-25
  • 1970-01-01
  • 2016-09-12
  • 2015-02-17
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2017-04-15
相关资源
最近更新 更多