2017-07-18 67 views
4
constructor(
    private route: ActivatedRoute, 
    private http: Http 
){ 
    // Observe parameter changes 
    let paramObs = route.paramMap; 

    // Fetch data once 
    let dataObs = http.get('...'); 

    // Subscribe to both observables, 
    // use both resolved values at the same level 
} 

是否存在與forkJoin類似的東西,只要參數發生變化就會觸發? forkJoin僅當所有可觀察結果完成時才起作用。未完成observables的forkJoin替代方案?

我只需要避開回調地獄,任何符合要求的替代方案都是值得歡迎的。

回答

6

有很多種選擇:

  1. 使用take(1)Observable.forkJoin()完成每個源可觀察:

    Observable.forkJoin(o1$.take(1), o2$.take(1)); 
    
  2. 使用zip()take(1)只發出時,所有源觀測量都發出同樣的件數:

    Observable.zip(o1$, o2$).take(1); 
    
  3. 使用combineLatest()發射時任何源觀測量的發射:

    Observable.combineLatest(o1$, o2$)