[英]Error response break valueChanges [Angular2]
當我訂閱表格並等待價值變化時,如果我的反應是我的服務錯誤,那么價值變化就會中斷......
這是代碼:
constructor(private fb: FormBuilder, private bankService: BankService) {
this.page = 1;
this.filter = this.fb.group({
text: ['', []],
bankC: ['', []]
});
this.filter.valueChanges
// wait for a pause in typing of 200ms then emit the last value
.debounceTime(200)
// only accept values that don't repeat themselves
.distinctUntilChanged()
// map that to an observable HTTP request, using the TickerLoad
// service and switch to that
// observable. That means unsubscribing from any previous HTTP request
// (cancelling it), and subscribing to the newly returned on here.
.switchMap((val: any) => {
return bankService.getCountry(val.bankC)
})
.subscribe((res) => {
console.log(res);
},
(err) => {
console.log(err);
});
// send an empty array to tickers whenever clear emits by
// merging in a the stream of clear events mapped to an
// empty array.
}
編輯
我發現了什么原因問題,它在 http 攔截器內部:
intercept(observable: Observable<Response>): Observable<Response> {
return observable.catch((err, source) => {
if (err.status == 401) {
this._router.navigate(['']);
return Observable.throw(err);
//&& !_.endsWith(err.url, 'api/auth/login')
} else {
return Observable.throw(err);
}
});
}
就是這部分: return Observable.throw(err);
如何在不中斷訂閱的情況下返回錯誤。
如果你想重新訂閱源 Observable,請在subscribe()
之前使用retry()
運算符:
...
.switchMap((val: any) => {
return bankService.getCountry(val.bankC)
})
.retry(-1) // resubscribe forever
.subscribe((res) => {
console.log(res);
}, ...
我知道為時已晚,但請嘗試使用 -
return throwError(err);
或者你也可以拋出一個恢復觀察。
return of(null);
或者
return EMPTY;
您還可以使用 RxJs pipe 運算符來鏈接多個 catchError 運算符,如下所示 -
.pipe(
catchError((err) => throwError(err)),
catchError((err) => of([])
);
一個拋出恢復錯誤 Observable,另一個發送恢復空 Observable。 通過這種方式,您可以向用戶顯示錯誤消息並發送一個恢復 Observable 來訂閱。 這永遠不會打破鏈條。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.