2016-07-24 192 views
0

我需要等待2個AJAX請求的結果對它進行一些計算。訂閱Observable.forkJoin永遠不會被調用

我發現Observable.forkJoin似乎做這項工作的方法。所以在我的部分,我接着說:

import { Observable } from 'rxjs/Rx'; 

// ... 

ngOnInit() { 
    Observable.forkJoin(
     this.instrumentService.current, 
     this.tuningService.tunings 
    ).subscribe(
     data => { 
      console.log(data); 
     } 
    ); 
} 

Ajax請求被髮送,但我從來沒有在subscribe回調傳遞。

如果我嘗試執行每個請求separatly正常工作:

this.instrumentService.current.subscribe(instrument => { 
    console.log(instrument); 
    this.instrument = instrument; 
}); 

this.tuningService.tunings.subscribe(tunings => { 
    console.log(tunings); 
    this.tunings = tunings; 
}); 

在數據服務(instrumentServicetuningService),該Observable聲明是這樣的(錯誤的可能來源,不知道):

private _tunings: BehaviorSubject<Tuning[]> = new BehaviorSubject([]); 

/** 
* Class constructor. 
* 
* @param {ApiService} apiService 
*/ 
constructor (private apiService: ApiService) { 
    this.getAll().subscribe(tunings => this._tunings.next(tunings)); 
} 

public get tunings() { 
    return this._tunings.asObservable(); 
} 

public getAll(): Observable<Tuning[]> { 
    return this.apiService.call(this.url); 
} 

apiService負責調用內置的角度http服務。

回答

2

據我記得forkJoin目前有一個bug,如果其中Observable返回null然後forkJoin訂閱永遠不會被調用。你可以用.zip代替嗎?

+0

就是這樣。我的一個'BehaviorSubject'使用'null'作爲初始狀態。使用'zip'方法可以正常工作。謝謝。 – Elorfin

相關問題