如何从捕获中返回 Promise 然后拒绝下一个捕获?

我有一个捕捉错误的承诺链,应该在那个捕捉中执行另一个异步操作(返回一个承诺)然后应该去最后一个捕捉,但我不知道该怎么做


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 但不知何故,而不是去最后一个“然后”它应该去最后一个“捕获”。


如果我只是使用


.catch((error) => {

    promiseWhichWillResolve())

    throw error

}

这将导致 promiseWhichWillResolve 不被等待。


我怎样才能做到这一点?


jeck猫
浏览 140回答 2
2回答

饮歌长啸

试试下面的。.catch((error) => promiseWhichWillResolve().then(() => Promise.reject(error)));

一只名叫tom的猫

我刚刚意识到有一种非常简单的方法可以通过在第一次捕获中使用 async/await 来做到这一点。这将确保异步操作完成,然后抛出去最后一个捕获。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(async (error) => {    await promiseWhichWillResolve()    throw `Roses ${error} red`}).then((result) => res.send(`This is true: ${result}`)).catch((error) => res.send(`ERROR: ${error}`))输出错误:玫瑰不是红色的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript