javascript - 如何从捕获中返回 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 不被等待。
我怎样才能做到这一点?
解决方案
我刚刚意识到有一种非常简单的方法可以通过在第一次捕获中使用 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}`))
输出
错误:玫瑰不是红色的
推荐阅读
- javascript - Image .onerror — 区分服务器响应 400 和 200,但 Content-Type 不是图像?
- python - 导入 python 日志记录时遇到问题
- css - div标签内按钮的CSS选择器
- html - 在页面重新加载时停止 python 函数调用
- javascript - 出于数学目的使用 React 将日期/时间转换为秒
- firebase - Firebase 错误:没有要更新的文档(带有 Firebase 应用的 Vue 3)。但是如果等待 1 分钟然后重新加载它是可更新的
- c++ - 如何正确使用 warpPerspective?
- javascript - 在reactjs中使用refs绑定输入类型
- amazon-web-services - 是否可以在 VPC 创建/编辑事件上触发 Lambda 函数?
- android - android中的数据绑定显示为空