正如在相關的RxJS文檔中所述,如果沒有錯誤,.subscribe()
method可以接受第三個在完成時調用的參數。
參考:
[onNext]
(Function
):功能調用在可觀察到的序列中的每個元素。
[onError]
(Function
):在可觀察序列異常終止時調用的函數。
[onCompleted]
(Function
):在可觀察序列的正常終止時調用的函數。
因此,你可以處理你的路由邏輯在onCompleted
回調,因爲它會在正常終止(這意味着不會有任何錯誤,當它被調用)被調用。
this.httpService.makeRequest()
.subscribe(
result => {
// Handle result
console.log(result)
},
error => {
this.errors = error;
},
() => {
// 'onCompleted' callback.
// No errors, route to new page here
}
);
作爲一個方面說明,也有.finally()
method被稱爲上完成,無論呼叫的成功/失敗的。這對於那些總是希望在HTTP請求後執行某些邏輯而不考慮結果(即用於記錄目的或用於某些UI交互(如顯示模式))的情況可能會有所幫助。
Rx.Observable.prototype.finally(action)
調用可觀察序列正常或異常終止源之後的指定的操作。
舉例來說,這裏是一個基本的例子:
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/finally';
// ...
this.httpService.getRequest()
.finally(() => {
// Execute after graceful or exceptionally termination
console.log('Handle logging logic...');
})
.subscribe (
result => {
// Handle result
console.log(result)
},
error => {
this.errors = error;
},
() => {
// No errors, route to new page
}
);
出所有我發現關於觀測的錯誤處理問題的答案實現的,這是最好的。謝謝 –