如何在 ES6 Promise 链中传播拒绝?

How to propagate a reject in a ES6 Promise chain?

通常这两个 Promise objects 是跨函数调用创建的。我已经将承诺放在一起,展示了我期望发生的事情:

new Promise((resolve, reject) => {

    //function call with returned promise...

    return new Promise((resolve, reject) => {

      reject("rejectCall_2")  //Prints nothing

    })

}).catch( e1 => {
  console.log('e1',e1) 
})

这应该将拒绝传播到我的 parent 承诺中。如何在外部承诺中捕获 rejectCall_2 ?

你 return 内部没有任何东西 new Promise。你return什么都扔掉,你做的是决心和拒绝。如果你想要 "return" 某事,包括另一个承诺,你所做的就是用那件事来解决。

所以你想要的是

new Promise((resolve, reject) => {
    //function call with returned promise...
    resolve(new Promise((resolve, reject) => {
    ^^^^^^^
      reject("rejectCall_2")
    }));
}).catch(e1 => {
  console.log('e1', e1) 
})

使用 babel-node 测试。

FWIW,您不妨使用直接的 return 粗箭头格式并省去几个花括号:

new Promise((resolve, reject) => 
    resolve(new Promise((resolve, reject) => 
      reject("rejectCall_2")
    ));
).catch( e1 => console.log('e1',e1));

我会注意到那些暗示您可能犯有“显式承诺构造函数反模式”的评论,您在其中构建承诺只是为了解决或拒绝它以及您可能刚刚使用的其他承诺首先。我假设你的例子是一个人为的例子,旨在展示你的特定问题。