我的程式中有一個視圖,其中的資料是分層的,因此我需要對資料庫進行安全呼叫,以填充適當的資料結構并顯示視圖,如果其中一個呼叫失敗,我希望能夠中斷它們。
我是Angular的新手,所以我在網上研究了很多,發現嵌套訂閱是一種不好的做法,應該避免,所以我使用了concatMap。現在,我如何在預覽失敗后中斷concatMaps的安全性?
這是我的代碼:
getData() {
this.service.httpCall(null,
url '/test/getallprovinces').pipe(
tap( (responsePro) => {
如果(responsePro.type =='success') {
//填入資料結構
} else {
//處理錯誤和中斷
throwError("錯誤")。
}}),
concatMap(() => this.service.httpCall(null, url '/test/getallcantons') )。
tap((responseCanton) => {
如果(responseCanton.type =='success') {
//填入資料結構
} else {
//處理錯誤和中斷
throwError("error on cantons")。
}
}),
concatMap(() => this.service.httpCall(null, url '/test/getalldistricts') )。
tap( responseDis => {
如果(responseDis.type =='success') {
//填入資料結構
} else {
//處理錯誤和中斷
throwError("地區錯誤")。
}
}))
.訂閱(
() => {},
error => {console.log("有事發生", error)}.
);
}
現在,如果發生錯誤,它會跳到下一個concatMap呼叫,由于沒有資料,它試圖填充資料結構并在那里拋出一個丑陋的錯誤(推到一個空的arra)。我想用trhowError來中斷這個呼叫
。編輯:我已經找到了解決方案,這部分要感謝Joshua McCarthy。我使用的是throwError,它回傳一個可觀察變數并繼續執行。相反,我應該在tap中使用一個普通的JS例外。現在,它確實打斷了高階的可觀察變數。
uj5u.com熱心網友回復:
嘗試在管道的末端添加catchError()。在那里你可以列印到控制臺日志并回傳EMPTY。這應該會在錯誤通知發出的那一刻中斷可觀察鏈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/318059.html
標籤:
