簡體   English   中英

如何從捕獲中返回 Promise 然后拒絕下一個捕獲?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM