2017-12-20 5 views
0

Ich habe ein Problem, einige meiner Komponenten benötigen die gleichen Daten aus dem Backend. Also rufen sie alle getDataMethod(); es sieht so ausAngular get Http bekommen eine Instanz von Observable

public getData(): Observable<any> { 
    return this.http.get<any>(this.backendUrl); 
} 

Antwort kommen in 5 Sekunden während dieser Zeit Ich nenne diese Methode ungefähr 3-4 Mal. Meine Frage ist also, ob sie für mehrere Abonnenten gleich beobachtbar sind?

Antwort

0

Sie könnten die Antwort als replaySubject wie

so veröffentlichen
public getData(): Observable<any> { 
    return this.http.get<any>(this.backendUrl) 
       .publishReplay(1) 
       .refCount(); 
} 

dies die Ergebnisse vom Server wiedergeben wird jedes Mal, wenn jemand auf die beobachtbaren abonniert hat einen Aufruf an Ihren api Endpunkt ohne zu machen.

+0

'shareReplay (1)' ist kürzer. –

-1

Sie können eine Variable "Cache" verwenden.

data:any 
public getData(): Observable<any> { 
    if (this.data) 
    return Observable.of(this.data); 
    else 
    return this.http.get<any>(this.backendUrl).do((data:any)=> 
     { 
      this.data=data 
     }); 
} 
+0

Dies führt immer noch zu mehreren Anfragen, wenn Sie sich anmelden, während die Anfrage noch nicht abgeschlossen ist. –