gpt4 book ai didi

javascript - 为什么在传递给 Promise.all() 的数组中包含 Promise.reject() 的 Promise.all() 之后不调用 onRejected?

转载 作者:行者123 更新时间:2023-11-29 18:00:53 26 4
gpt4 key购买 nike

给定

var promises = [Promise.resolve("a"), Promise.reject("b")];

Promise.all(promises.map(function(p, index) {
return p.then(function(data) {
console.log("inside .map()", data, "index", index)
return data
}, function(err) {
console.log(err);
return err
})
}))
.then(function(complete) {
console.log("all promises after .map()", complete)
}, function(err) {
console.log("err", err)
})

为什么 onRejected 没有在 .then(onFulfilled, onRejected) 之后调用 Promise.all()

jsfiddle https://jsfiddle.net/9gprLc7q/

https://jsfiddle.net/9gprLc7q/

最佳答案

您需要了解,处理拒绝会导致 promise 重回成功之路。一种方法是重新抛出失败处理程序,如下所示:

var promises = [Promise.resolve("a"), Promise.reject("b")];

Promise.all(promises.map(function(p, index) {
return p.then(function(data) {
console.log("inside .map()", data, "index", index)
return data
}, function(err) {
console.log(err);

// RE-THROW!!
throw err;

})
}))
.then(...

如果拒绝处理程序的目的仅仅是记录,那么您可以将其移出链:

Promise.all(promises.map(function(p, index) {

// MOVE ERROR HANDLER OUTSIDE OF CHAIN
p.catch(function(e) { console.log(e); });

return p.then(function(data) {
console.log("inside .map()", data, "index", index)
return data
})
}))
.then(...

关于javascript - 为什么在传递给 Promise.all() 的数组中包含 Promise.reject() 的 Promise.all() 之后不调用 onRejected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35042068/

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