[英]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.