2
讓我們想象一下,我們有一個功能,像這樣:使用async/await時,如何在一次調用錯誤時停止執行某個函數?
Router.get('/', async function (req, res, next) {
let result = await someFunction().catch(next)
someOtherCall()
})
如果出現了錯誤,它會繼續到全局錯誤處理程序通過調用next(error_reason)
。但是,如果someFunction()
失敗,我們不希望someOtherCall()
運行。此刻,我可以看到這個固定的方法有兩種:
// Suggestion from https://stackoverflow.com/q/28835780/3832377
Router.get('/', async function (req, res, next) {
let result = await someFunction().catch(next)
if (!result) return // Ugly, especially if we have to run it after every call.
someOtherCall()
})
Router.get('/', async function (req, res, next) {
let result = someFunction().then(() => {
// Much less work, but gets us back to using callbacks, which async/await were
// meant to help fix for us.
someOtherCall()
}).catch(next)
})
有沒有一種簡單的方法來停止執行的函數,如果任何函數調用,這並不意味着所有的函數調用後或添加另一種說法使用回調?
爲什麼不使用承諾做到這一點 – Volem
@Volem我們正在使用的承諾,someFunction()返回時,該函數成功運行解析或引發功能錯誤時,一個承諾出。 –