2017-07-02 19 views
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) 
}) 

有沒有一種簡單的方法來停止執行的函數,如果任何函數調用,這並不意味着所有的函數調用後或添加另一種說法使用回調?

+0

爲什麼不使用承諾做到這一點 – Volem

+0

@Volem我們正在使用的承諾,someFunction()返回時,該函數成功運行解析或引發功能錯誤時,一個承諾出。 –

回答

3

您可以簡單地使用try-catch

Router.get('/', async function (req, res, next) { 
    try { 
    let result = await someFunction() 
    someOtherCall() 
    } 
    catch(exception) { 
    next(exception) 
    } 
}) 
相關問題