永远不会调用Observable.forkJoin的订阅

时间:2016-07-24 10:37:53

标签: javascript angular rxjs

我需要等待2个AJAX请求的结果才能对其进行计算。

我找到了似乎可以完成工作的Observable.forkJoin方法。所以在我的组件中我添加了:

import { Observable } from 'rxjs/Rx';

// ...

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

发送了AJAX请求,但我从未传递subscribe回调。

如果我尝试分别执行每个请求,它可以正常工作:

 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 个答案:

答案 0 :(得分:3)

据我记得forkJoin目前有一个错误,如果其中一个Observable返回null,则永远不会调用forkJoin订阅。您可以尝试使用.zip吗?

答案 1 :(得分:2)

对我来说,combineLatest rxjs运算符原来是我正在寻找的运算符。它与BehaviorSubjects一起使用,您可能期望forkJoin起作用:

任何可观察对象发出一个值时,请从每个观察对象中发出最后一个发出的值。

(文档:https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest