2017-02-20 12 views

ответ

2

Этот ответ относится к RxJS 5:

Один из способов будет использовать publishReplay:

this.http 
    .get() 
    .map() 
    .publishReplay(1) 
    .refCount(); 

Если источник является, что завершает (который был бы типичным для отдыха-вызова, так как он завершается после получения ответа), вы также можете использовать publishLast:

this.http 
    .get() 
    .map() 
    .publishLast() 
    .refCount(); 

И третий путь (который дает вам максимальную гибкость) будет использовать внешний BehaviorSubject или ее ReplaySubject:

public myData$: BehaviorSubject<any> = new BehaviorSubject(null); // initial value is "null" 

public requestData(): BehaviorSubject<any> { 
    this.http 
     .get() 
     .map() 
     .do(data => this.myData$.next(data)) 
     .subscribe(); 

    return this.myData$.skip(1); // the returned subject skips 1, because this would be the current value - of course the skip is optional and depends on the implementation of the requesting component 
} 

В компоненте (ы) вы можете получить данные через myData$.subscribe(...) для получения текущих «кэшированных» данных или через requestData().subscribe(...) для получения последних данных.