为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2022-01-07 10:32:39
我有一个捕捉错误的承诺链,应该在那个捕捉中执行另一个异步操作(返回一个承诺)然后应该去最后一个捕捉,但我不知道该怎么做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 不被等待。我怎样才能做到这一点?
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

试试下面的。

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


查看完整回答
反对 回复 2022-01-07
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我刚刚意识到有一种非常简单的方法可以通过在第一次捕获中使用 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}`))

输出


错误:玫瑰不是红色的


查看完整回答
反对 回复 2022-01-07
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信