我有一个捕捉错误的承诺链,应该在那个捕捉中执行另一个异步操作(返回一个承诺)然后应该去最后一个捕捉,但我不知道该怎么做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)));
一只名叫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}`))
输出
错误:玫瑰不是红色的
添加回答
举报
0/150
提交
取消