我怎样才能从一个承诺中退回承诺,然后拒绝下一个承诺?

时间:2019-11-21 11:29:37

标签: javascript asynchronous ecmascript-6 promise

我有一个捕获错误的Promise链,应该在该catch中执行另一个异步操作(返回Promise),然后转到最后一个catch,但是我不知道该怎么做

const roses_color = "blue"

new Promise((resolve, reject) => {
    (roses_color === "red") ? resolve("are") : reject("are not")
})
.then((result) => 
    new Promise((resolve, reject) => {
        setTimeout(() => resolve(`Roses ${result} red`), 1000)
    })
)
.catch((error) => promiseWhichWillResolve())
.then((result) => res.send(`This is true: ${result}`))
.catch((error) => res.send(`ERROR: ${error}`))

它的输出是

  

最终结果:玫瑰不是红色

我想发生的是第一个捕获返回promiseWhichWillResolve,但是以某种方式而不是最后一个'then',它应该到达最后一个'catch'。

如果我只是使用

.catch((error) => {
    promiseWhichWillResolve())
    throw error
}

这将导致没有等待promiseWhichWillResolve。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我刚刚意识到有一个真正简单的方法,可以在第一个捕获中使用async / await。这样可以确保异步操作已完成,然后抛出该异常。

[info] Tests failures
[info] - should annotated with clues *** FAILED ***
[info]   MyCustomInformation(picard,42) "" was empty (HelloSpec.scala:10)

输出

  

错误:玫瑰不是红色

答案 1 :(得分:1)

尝试以下操作。

.catch((error) => promiseWhichWillResolve().then(() => Promise.reject(error)));