gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:37:49 26 4
gpt4 key购买 nike

我已经发布了 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com