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)));

一只名叫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
提交
取消