javascript - 如果其中一个 promise 失败,Promise.all 不会返回任何 promise

标签 javascript promise es6-promise

我已经发布了 Wait until all promises complete even if some rejected 和 d3.js v5,但出现了关于这段代码的另一个问题:

var files = ["data1.json", "data2.json", "data3.json"];
var promises = [];

files.forEach(function(url) {
    promises.push(d3.json(url))
});

Promise.all(promises).then(function(values) {
    console.log(values)
});

如果其中一个 URL 无效,则 Promise.all 不会返回任何结果;换句话说,所有响应都必须有效,Promise.all 才能返回值。如果其中一个 URL 出现错误,如何获得其他响应?

最佳答案

这就是Promise.all 的工作原理。但如果你想让它为被拒绝的 promise 工作,你可以这样做:

var files = ["data1.json", "data2.json", "data3.json"];
var promises = [];

files.forEach(function(url) {
    promises.push(
      d3.json(url)
        .then(function(data) {
          return {success: true, data: data};
        }, function() {
          return {success: false};
        })
    )
});

Promise.all(promises).then(function(values) {
    console.log(values)
});

请注意Promise#then可以接受两个函数作为参数,第一个函数在 Promise 被解析时调用,第二个函数在 Promise 被拒绝时调用。

您可以手动解析被拒绝的 Promise,并且可以返回一个标识符来了解调用是否导致成功或失败,就像我使用 success 键所做的那样。

关于javascript - 如果其中一个 promise 失败,Promise.all 不会返回任何 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49538223/

相关文章:

javascript - Webpack/ES6 动态导入

javascript - Onclick Only 似乎只工作一次

javascript - 未处理的 promise 拒绝: Can't set headers after they are sent

javascript - 在 Promise 返回函数中找到第一个成功

javascript - 获取 polyfill,未定义的 PromiseValue

javascript - 使用 Promise() 在 Web 浏览器上加载图像

javascript - 将 y 轴显示为百分比?

javascript - bxSlider jQuery 插件问题

javascript - JavaScript 如何知道等待内部 promise 的结果?

javascript - 将回调转换为 Promise 时出现问题