2017-06-22 98 views
0

我發現自己正在使用最新的Angular版本編寫的主題中的代碼並搜索網頁,並且我發現大部分開發人員不處理subscription錯誤。Angular - 何時處理Observable訂閱中的錯誤

我的問題是:何時必須處理Observable訂閱中的錯誤?

沒有錯誤處理:

this.myService.observable$.subscribe(
     (data) => { 
      // do stuff with data 
     } 
    ); 

錯誤處理:

this.myService.observable$.subscribe(
     (data) => { 
      // do stuff with data 
     }, 
     err => { 
      // do stuff with error 
     } 
    ); 

我主要是找到的第一個版本,但...

是不是不處理問題訂閱的錯誤?

這不會使代碼變得更加牢固,可測試並且更容易失敗嗎?

+0

如果你要處理的錯誤和做對錯誤進行一些操作是設置錯誤Cb的良好習慣。 –

+0

@YordanNikolov是的,我確實有Cb設置在我的觀察對象上,或者至少是其中的大部分。但我的問題更多的是好的做法,以及爲什麼尊重的開發者似乎不'遵循'他們。也許有不同的處理,我還不知道。也許它直接在Observable delcaration中處理(例如Http請求) – SrAxi

+0

對我來說,處理所有錯誤以通知用戶,將這些錯誤發送到後端並跟蹤它總是一種很好的做法。我想到的另一個最佳實踐是使用獨立的函數處理程序(函數聲明)而不是IIF。 –

回答

1

爲什麼錯誤處理重要click Me

現在讓我們來看看爲什麼錯誤處理是必要的觀測量..

例子:

this.service.send(this.shareData).subscribe(() => { 

     // Here you are sure that the send has shared the data sucessFully 

    }, (error) => { 

     /* Now If you want to handle errors Like Front End Errors and Log this 
     In your backEnd DB So solve it and fix it */ 

     /* Example below check error type is It from frontEnd and log error through Api */ 

     if(error.type !== 'API') { 
     this.logService.log({ 
      Level: 2, 
      Message: 'Failed to setFromDB', 
     }); 
     } 
    }); 
+0

我明白了。我知道我們爲什麼要處理錯誤,但這就是爲什麼我不能很好地理解爲什麼在大多數情況下,開發人員不會處理Observable訂閱的錯誤。它僅與那些直接與用戶交互的訂閱相關嗎? – SrAxi

+0

你的意思是'角度開發團隊'或者'使用角度的開發者' – mayur

+0

讓我們說社區開發者。我所看到的所有示例和主題都沒有訂閱的錯誤處理*(在80%)*。這一定是有原因的。 – SrAxi

1

處理錯誤以給用戶反饋或回退到默認行爲是很好的做法。

例如,如果您嘗試聯繫REST服務併發生通信,則可能要通知用戶有關連接問題或加載緩存數據。

或者如果REST服務返回錯誤。例如,您的應用程序是預訂應用程序,用戶正在執行訂單,但一旦他提交訂單,就沒有更多的庫存項目。 REST服務返回和錯誤,您應該向用戶顯示沒有更多項目。

此外,在角風格指南:

數據管理的細節,如文件頭,HTTP方法,高速緩存錯誤處理和重試邏輯,無關的部件和其他數據的消費者。

這意味着你應該從你的服務有意義的信息返回。

+0

好的,這只是個人的考慮?就像,只是爲了告知用戶*因爲這個原因*破壞了*。我不知道爲什麼這不能說服我,我的意思是,我們應該始終將行動的結果傳達給用戶,但不處理代碼中的錯誤是奇怪的。 – SrAxi

+0

錯誤是一個結果! – JEY

+0

我認爲錯誤是在Observable構造中處理的,因此,在代碼方面,錯誤在那裏處理。然後在訂閱中,我們只處理最終用戶的反饋。 – SrAxi