2017-12-05 6 views
0

나는 5 초마다 새로운 값이 나오도록 설정된 간격과 함께 .combineLatest를 사용하려고합니다. 그 다음이 구성 요소를 자식 구성 요소에 입력으로 전달하지만 입력에 전달되는 데이터는 매번 동일하며 dev 도구에서 네트워크 탭을 볼 때 추가 호출이 발생하지 않습니다.Observable combine/Interval/Timer와 최신 버전

.flatMap(() => { 
    return Observable.interval(5000).combineLatest(
     this.http.getData(args), 
     this.http.getOtherData(args) 
    ) 
    }) 
    .subscribe(res => { 
    this.dailyStocks = res[1]; 
    this.dailyStocks = this.dailyStocks.slice(0) 
    } 

하위 구성 요소 :

@Input('dailyStocks') 
    set dailyStocks(val: ListSymbolObj[]) { 
    this._dailyStocks.next(val); 
    } 

    get dailyStocks() { 
    return this._dailyStocks.getValue(); 
    } 

    ngOnInit() { 
    this._dailyStocks 
      .filter(x => x != undefined) 
      .take(1) 
      .subscribe(res => { 
      //res is same 
      } 
    } 

답변

2

간격에서 모든 값에 대한 요청을하려면 당신이 이런 식으로 작성해야 :

Observable.interval(5000).switchMap(() => 
    Observable.combineLatest(
    this.http.getData(args), 
    this.http.getOtherData(args)  
) 
) 

는 현재 코드가 추가 요청을하지 그것 때문에 단지 세 개의 Observables의 값을 결합합니다. 다음 코드와 동일합니다.

Observable.combineLatest(
    Observable.interval(5000), 
    this.http.getData(args), 
    this.http.getOtherData(args)  
) 
+0

감사합니다. – Yeysides