3

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

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

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

4

1 回答 1

2

你不会从内部返回任何东西new Promise。你返回的东西都只是扔掉,你所做的就是决心和拒绝。如果你想“返回”一些东西,包括另一个承诺,你要做的就是用那个东西解决。

所以你想要的是

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,您不妨使用立即返回胖箭头格式并为自己节省一些花括号:

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

我会注意到建议您可能犯了“显式承诺构造函数反模式”的评论,在这种情况下,您构造一个承诺只是为了解决或拒绝它与您最初可能刚刚使用的其他承诺。我假设您的示例是人为的示例,旨在展示您的特定问题。

于 2015-07-09T16:06:06.590 回答