簡體   English   中英

從 BehaviorSubject 創建的 Angular 2 rxjs observable 不適用於 forkJoin

[英]Angular 2 rxjs observables created from BehaviorSubject are not working with forkJoin

我正在嘗試使用Observable.forkJoin並且訂閱處理程序永遠不會被擊中。 forkJoin 操作符在我的應用程序的其他部分為我工作,我在非工作場景中能想到的唯一區別是使用asObservable()函數從BehaviorSubject對象創建可觀察對象。

此訂閱被點擊

    let obs = Observable.of(1);

    Observable.forkJoin(
        obs
    ).subscribe(data => {
        console.log(data);
    });

這個不

    let bs = new BehaviorSubject<number>(1);
    let obs = bs.asObservable();

    Observable.forkJoin(
        obs
    ).subscribe(data => {
        console.log(data);
    });

當然,在我的實際用例中,有不止一個觀察結果,這就是我首先使用 forkJoin 的原因。

是否還需要對 BehaviorSubject 執行其他操作才能使其與 forkJoin 一起使用?

更新:

在對 RxJs 文檔進行了更多調查后,我意識到Observable.combineLatestforkJoin更適合我的需要...鏈接在這里以防遇到此 SO 帖子: http : forkJoin es6/Observable.js~Observable.html#static-method-combineLatest

問題是forkJoin在完成時加入可觀察對象。

在您的第一個代碼段中,您正在使用of創建一個可觀察對象 - 在subscribe ,它會立即發出一個值然后完成。

在您的第二個代碼段中, BehaviorSubject未完成。 如果您調用complete ,您會看到記錄到控制台的值:

let bs = new BehaviorSubject<number>(1);
let obs = bs.asObservable();

Observable.forkJoin(
    obs
).subscribe(data => {
    console.log(data);
});

bs.complete();

如果您不想使用完整方法,可以使用 take(1) 管道。

const subjectA = new BehaviorSubject<number>(0);
const a$ = subjectA.asObservable();

Observable.forkJoin(
    a$.pipe(take(1))
).subscribe(data => {
    console.log(data);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM