2017-08-24 92 views
4

投擲的錯誤上一級在異步函數重新拋出異常偏上的水平上異步函數

async create(body: NewDevice, firstTry = true): Promise<RepresentationalDevice> { 
    try { 
    return await this.dataAccess.getAccessToken() 
    } catch (error) { 
    throw error 
    } 
} 

VS這種

async create(body: NewDevice, firstTry = true): Promise<RepresentationalDevice> { 
    return await this.dataAccess.getAccessToken() 
} 

我的意思是,在結束在上一級,我必須捕捉到錯誤,並且根本沒有任何修改

這兩種方法是否相同?我可以使用第二種方法而不出現錯誤處理問題嗎?

+0

僅供參考,「異步」功能是ES2017的一部分,而不是ES7(ES2016)。 –

+0

你的問題是什麼?你問是否可以使用第二個例子? –

+2

是的,這兩個都是一樣的。它們也與'return this.dataAccess.getAccessToken()'(return'await'不等於'return'在'try'內)一樣。 – Ryan

回答

0

這與異步函數無關。捕獲一個錯誤只是爲了重新拋出它是一樣的,而不是首先捕獲它。即

try { 
    foo(); 
} catch(e) { 
    throw e; 
} 

foo(); 

基本上等價的,不同之處在於堆棧跟蹤可能是不同的(因爲在第一種情況下的錯誤是在不同的位置拋出)。

+0

對不起,你看到了編輯的問題? –

+0

是的......爲什麼? –

+0

那麼,我不明白你爲什麼說「這與'異步'功能無關」 'foo();'在這種情況下是一個承諾,所以我需要添加await關鍵字來返回諾言解決 –