2017-08-16 115 views
0

我期待從2角一個應用程序升級到4,我發現了以下錯誤:錯誤的角度和RXJS承諾

Type 'Promise<void | Store>' is not assignable to type 'Promise<Store>'. 

類型「無效|商店'不能分配鍵入'存儲'。 類型'void'不可指定爲'Store'類型。

有問題的線路是這樣的:

return this.http.get(url, { headers: this.headers }) 
      .toPromise() 
      .then(response => response.json().data as Store) 
      .catch((err) => { console.log('An error occurred under StoreService.StoreGetById', err); }); 

這個工作我升級之前,我是相當新的RxJS。

+3

這不是一個RxJS問題;這是一個TypeScript問題。和'承諾'類型更準確地傳達情況。你的「catch」會吞噬錯誤,並不會返回任何內容 - 因此是「void」。有兩種可能的途徑:一種解決爲「商店」;另一個解決爲「無效」。我會通過重新拋出錯誤來解決問題,因爲吞嚥它只會導致參考錯誤發生。 – cartant

回答

2

承諾拒絕會自動記錄 - 就像cartant的評論所解釋的那樣 - 由.catch產生的錯誤會導致| Void

當一個JavaScript函數不返回任何返回undefined默認 - 讓你的承諾是無論是實體店(從then)或無效(從catch)。

正確的解決方案IMO將完全刪除.catch子句,並依賴於承諾拒絕會自動記錄到您的控制檯。