2016-09-08 2 views
10

Ich verwende HTTP-Provider in Angular 2 für das Laden von Daten von API.Wie Parameter in Observable (RxJs) geändert werden

return this.http.post(url, urlSearchParams.toString(), { 
     headers: this.getHttpHeaders() 
    }) 
    .retryWhen((error) => { 
     return this.handleRetryError(error); 
    }) 

Wenn es keine oder alte Sitzung ist erstelle ich neue in this.handleRetryError (Fehler) und füllen Header mit ihm. (Die Methode getHttpHeaders() gibt das Array mit den Headern zurück.)

RetryWenn Sie versuchen, diesen Beitrag erneut zu schreiben, aber es gibt unveränderte (alte) Header aus der ersten Runde.

Gibt es eine Möglichkeit, Header-Parameter für http.post von .readyWhen zu ändern?

Vielen Dank für die Hilfe :)

Antwort

0

Try this:

return Observable 
    .defer(() => { 
     this.http.post(url, urlSearchParams.toString(), { 
      headers: this.getHttpHeaders() 
     }); 
    }) 
    .retryWhen(errors => { 
     this.handleRetryError(errors); 
     return errors.delay(200) 
    }); 
0

Sie könnten möglicherweise einen Verweis auf ein Header-Variable außerhalb dieser Funktion halten, und dann diese Variable innerhalb der Funktion retryWhen ändern .

1

Sie müssen die Observable umbrechen und die resultierende äußere Observable so jedes Mal erneut ausführen.

https://plnkr.co/edit/nCvaC6vJYEBJYeVENz9N?p=preview

Observable.of(1).mergeMap(x=> { 
    return this.http.get('data.json', this.configObject()) 
    .do(x => throw(x)) 
    .map(res=>res.json()); 
}) 
.retryWhen(e => e.delay(2000)) 
.subscribe(); 

für Ihren Code

return Observable.of(1).mergeMap(x => { 
    return this.http.post(url, urlSearchParams.toString(), { 
     headers: this.getHttpHeaders() 
    }); 
    }) 
    .retryWhen(e => this.handleRetryError(e)) 
Verwandte Themen