2016-10-31 57 views
2

當我subscirbe形成並等待突破,如果我resonse是從我的服務偏差值發生改變......錯誤響應休息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 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);

我怎樣才能返回沒有制動訂閱的錯誤。

+0

什麼錯誤,以及如何打破? – martin

+0

服務器返回404錯誤,之後:this.filter.valueChanges不起作用。它只是停止'console.log' –

+0

錯誤是否達到'console.log(err);'? – martin

回答

1

如果你想subscribe()之前重新訂閱源可觀察使用retry() operator

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

我寧願不使用最終重置...我發現什麼問題你可以檢查在主帖中的編輯? –

+1

@VladimirDjukic你不能返回錯誤而不破壞取消訂閱。這就是RxJS的設計行爲。但是,您可以使用'retry()'或'retryWhen()'操作符重新連接或使用'catch()'操作符切換到另一個Observable。 – martin

+0

如果我重試(-1)'它會發送很多請求到服務器......這將是一件好事,如果我可以在404錯誤的intreceptor上繼續響應但發送錯誤數據... –