2017-07-17 4 views
0

Ich habe diese beobachtbaren http AnfrageAngular - beobachtbare ähnlich wie http.get aber ohne Anfrage

refreshToken() { 
    return this.http.get(this.siteService.apiDomain() + '/api/token?token=' + localStorage.getItem('JWToken'), {}) 
     .map((response: Response) => { 
      return response; 
     }) 
} 

und ich bin die beobachtbare wie diese

return this.refreshTokenService.refreshToken() 
       .flatMap((result: any) => { 
        // if got new access token - retry request 
        if (JSON.parse(result._body).token) { 
         localStorage.setItem('JWToken', JSON.parse(result._body).token); 
        } 
        this.setHeaders(url); 
        return this.request(url, options); 
       }) 

Und mein Problem Aufruf ist, dass, wenn ich Habe mehrere parallele Anfragen Ich mache mehrmals das refreshToken(). Ich möchte einen Weg finden, einen gefälschten HTTP-Anruf zu machen, und den Token zurückgeben, den ich bereits kenne oder nichts.

Observable.empty() // Failed to compile (Type '{}' is not assignable to type 'Response'.) 
Observable.empty().filter(() => {return true}) // Compiles but it stop the flatMap sequence. 

Antwort

0

Ich bin nicht sicher, ob ich völlig verstehen, aber vielleicht möchten Sie Observable.of()?

Hier ist ein Beispiel, wo ich es benutzt habe. Wenn die ID 0 ist, wird ein initialisiertes Produkt als Observable zurückgegeben.

import 'rxjs/add/observable/of'; 
... 

getProduct(id: number): Observable<IProduct> { 
    if (id === 0) { 
     return Observable.of(this.initializeProduct()); 
    }; 
    const url = `${this.baseUrl}/${id}`; 
    return this.http.get(url) 
     .map(this.extractData) 
     .do(data => console.log('getProduct: ' + JSON.stringify(data))) 
     .catch(this.handleError); 
} 
0

Ich würde die Verwendung von BehaviourSubjects empfehlen, Its ermöglicht es Ihnen, den letzten Wert zu speichern, bis entweder die Komponente zerstört oder Sie Gesicht, es zu ändern. Auch wenn sich der Wert im BehaviourSubject ändert; Jede Komponente, die sie abonniert hat, erhält auch neue Daten. Plus als zusätzlichen Bonus müssen Sie nicht den Server Evrytime eine Komponente nennen wollen den Wert wie Observable zu erhalten, da es den Wert speichern, können Sie den Wert jederzeit ohne den Server aufrufen. BehaviourSebject example

Verwandte Themen