2016-10-31 4 views
2

Wenn ich subscirbe und für Wertänderungen warten zu bilden, wenn ich brechen resonse Fehler von meinem Service ist ...Fehlerreaktion Pause valueChanges [Angular2]

Hier Code:

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. 
    } 

bearbeiten

fand ich, was couse Problem, es innerhalb http intreceptor ist:

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); 
      } 
     }); 

    } 

Es ist dieser Teil: return Observable.throw(err);

Wie kann ich Fehler ohne Bremsabonnement zurückgeben.

+0

Welche Fehler und wie es bricht? – martin

+0

Server zurück 404 Fehler und danach das: 'this.filter.valueChanges' funktioniert nicht. Es stoppt nur 'console.log' –

+0

Erreicht der Fehler' console.log (err); '? – martin

Antwort

1

Wenn Sie zu der Quelle beobachtbar resubscribe wollen retry() operator vor subscribe():

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

Ich würde lieber nicht ultimativen Reset verwenden ... Ich fand, was couse Problem könnten Sie überprüfen, bearbeiten im Hauptpost? –

+1

@VladimirDjukic Sie können Fehler nicht ohne Abbruch der Abmeldung zurückgeben. Das ist das Verhalten von RxJS. Sie können jedoch die 'retry()' - oder 'retryWhen()' -Operatoren erneut verbinden oder zu einem anderen Observable mit dem 'catch()' -Operator wechseln. – martin

+0

Wenn ich 'versuche (-1)' Es wird eine Menge Anfrage an den Server senden ... Es wäre gut, wenn ich introreceptor auf 404 Fehler, um die Antwort fortzusetzen, aber um Fehlerdaten zu senden ... –

Verwandte Themen