Javascript 我怎样才能从一次捕获中回报承诺,然后拒绝下一次捕获?
我有一个承诺链,它捕获错误,应该在该捕获中执行另一个异步操作(返回承诺),然后应该转到最后一个捕获,但我不知道如何做到这一点Javascript 我怎样才能从一次捕获中回报承诺,然后拒绝下一次捕获?,javascript,asynchronous,ecmascript-6,promise,Javascript,Asynchronous,Ecmascript 6,Promise,我有一个承诺链,它捕获错误,应该在该捕获中执行另一个异步操作(返回承诺),然后应该转到最后一个捕获,但我不知道如何做到这一点 const roses_color = "blue" new Promise((resolve, reject) => { (roses_color === "red") ? resolve("are") : reject("are not") }) .then((result) => new Promise((resolve, rejec
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}`))
这个的输出是
最终结果:玫瑰不是红色的
我希望的是,第一个捕获返回承诺,这将解决,但不知何故,不是去最后一个“然后”它应该去最后一个“捕获”
如果我用
.catch((error) => {
promiseWhichWillResolve())
throw error
}
这将导致不等待解决的承诺
我怎样才能做到这一点呢?我刚刚意识到,通过在第一个catch中使用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}`))
输出
错误:玫瑰不是红色的
尝试以下方法
.catch((error) => promiseWhichWillResolve().then(() => Promise.reject(error)));
我认为你不能做一个
。然后在之后做一个。catch
也许可以试着修改你的案例顺序。你不应该那么做/catch@RedKnight91由于您在catch中使用promisehillresolve函数,如果它成功解决,那么它将进入下一个,所以我们应该切断promisehillresolve函数中的承诺链