为什么在 Promise.all() 之后不调用 onRejected,其中 Promise.reject() 包含在传递给 Promise.all() 的数组中? [英] Why is onRejected not called following Promise.all() where Promise.reject() included in array passed to Promise.all()?

查看:16
本文介绍了为什么在 Promise.all() 之后不调用 onRejected,其中 Promise.reject() 包含在传递给 Promise.all() 的数组中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定

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)
})

为什么在 .then(onFulfilled, onRejected) 后面的 Promise.all() 中没有调用 onRejected ?

why is onRejected not called at .then(onFulfilled, onRejected) following Promise.all() ?

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

https://jsfiddle.net/9gprLc7q/

推荐答案

你在这里真正完成的事情是这样的:

What you've really done here is something like this:

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

var notRejectedPromise = 
    Promise.reject("b")
      .then((resolved) => resolved, (err) => err)

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

Promise.all(promises)
.then(function(complete) {
  console.log("all promises after .map()", complete)
}, function(err) {
  console.log("err", err)
})

但是决定通过返回任何 err 来处理 err 部分,您返回了一个字符串.这不是拒绝的理由.

But deciding to handle the err portion by returning whatever err was, you returned a string. This is not a reason for rejection.

要实际导致 Promise.all() 拒绝,您需要在 resolvedrejected 部分发生错误代码>.then

To actually cause the Promise.all() to reject you need an error to occur in either the resolved or rejected portion of .then

鉴于此,如果您返回一个被拒绝的承诺,它将被拒绝:

Given this, if you return a rejected promise, it will reject:

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

console.log(err)

return Promise.reject(err)

或者你可以抛出一个错误:https://jsfiddle.net/9gprLc7q/2/

Alternatively you can throw an error: https://jsfiddle.net/9gprLc7q/2/

console.log(err)

throw new Error(err)

这篇关于为什么在 Promise.all() 之后不调用 onRejected,其中 Promise.reject() 包含在传递给 Promise.all() 的数组中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆