Why is onRejected not called following Promise.all() where Promise.reject() included in array passed to Promise.all()?

后端 未结 2 1562
借酒劲吻你
借酒劲吻你 2020-11-27 23:23

Given

         


        
2条回答
  •  眼角桃花
    2020-11-27 23:42

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

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

    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)
    

    to

    return Promise.reject(err)
    

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

    console.log(err)
    

    to

    throw new Error(err)
    

提交回复
热议问题