[英]How can I return a Promise from a catch and then reject to next catch?
我有一個捕獲錯誤的 promise 鏈,應該在該捕獲中執行另一個異步操作(返回一個 Promise),然后應該 go 到最后一個捕獲,但我不知道該怎么做
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}`))
這個的output是
最終結果:玫瑰不是紅色的
相反,我想發生的是讓第一個捕獲返回 promiseWhichWillResolve 但不知何故而不是去最后一個“然后”它應該 go 到最后一個“捕獲”。
如果我只是使用
.catch((error) => {
promiseWhichWillResolve())
throw error
}
這將導致 promiseWhichWillResolve 不被等待。
我怎樣才能做到這一點?
我剛剛意識到有一種非常簡單的方法可以通過在第一次捕獲中使用 async/await 來做到這一點。 這將確保異步操作完成,然后將最后一個捕獲扔給 go。
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}`))
Output
錯誤:玫瑰不是紅色的
試試下面的。
.catch((error) => promiseWhichWillResolve().then(() => Promise.reject(error)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.