angular - 错误响应中断 valueChanges [Angular2]

标签 angular rxjs observable rxjs5

当我订阅表单并等待值更改时,如果我的服务出现错误,则会中断...

这里是代码:

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 intreceptor内部:

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,请使用 retry() operatorsubscribe() 之前:

...
.switchMap((val: any) => {
    return bankService.getCountry(val.bankC)
})
.retry(-1) // resubscribe forever
.subscribe((res) => {
    console.log(res);
}, ...

关于angular - 错误响应中断 valueChanges [Angular2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40341771/

相关文章:

angular - 在 Angular 5 中正确反序列化日期

javascript - 如何避免可观察的 Angular 延迟或确保仅当可观察准备好时才调用我的函数

angular - 是否需要显式取消订阅组件中的服务?为什么? ( Angular 7)

javascript - 如果其他控件没有值,如何使复选框保持禁用状态,如果控件在 Angular 8 中具有值,则如何使复选框保持禁用状态

android - ionic 4 : Hardware Back Button Reloading Application

javascript - ForEach 比我的 Observable 返回值更快

rxjs - 如何从最后一项开始以相反的方向从数组中发出值?

css - Angular 应用程序中的过渡动画在 EDGE 中不起作用

angular - compiler.js :2175 Uncaught Error: The template specified for component . ..Component... 不是字符串

node.js - RxJS:将 Node.js 套接字转换为 Observables 并将它们合并到一个流中