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

时间:2015-07-09 15:48:16

标签: javascript ecmascript-6 es6-promise

通常,两个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?

1 个答案:

答案 0 :(得分:2)

您不会从<p> <button onclick="toggle_color(this);"> text inside button </button> text to toggle color </p> 内部返回任何内容。无论你返回什么,都会被抛弃,你所做的就是解决和拒绝。如果你想“回报”某些东西,包括另一个承诺,你所做的就是解决这个问题。

所以你想要的是

new Promise

使用babel-node测试。

FWIW,您也可以使用立即返回胖箭头格式并为自己保留一些花括号:

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

我会注意到这些意见表明你可能会对“明确的承诺构造函数反模式”感到内疚,你构建一个承诺,只能通过你可能刚才用过的其他承诺来解决或拒绝它。第一名。我假设你的例子是一个旨在展示你特定问题的人造例子。