2016-10-20 48 views
8

Tôi đang cố gắng sử dụng Observable.forkJoin và trình xử lý đăng ký không bao giờ bị tấn công. Toán tử forkJoin đang làm việc cho tôi trong các phần khác của ứng dụng của tôi và sự khác biệt duy nhất tôi có thể nghĩ đến trong kịch bản không hoạt động là các quan sát đang được tạo từ các đối tượng BehaviorSubject sử dụng chức năng asObservable().Quan sát 2 rxjs được tạo từ BehaviorSubject không hoạt động với forkJoin

này đăng ký được đánh

let obs = Observable.of(1); 

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

Cái này không

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

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

Tất nhiên trong trường hợp sử dụng thực tế của tôi có nhiều hơn một obseravble đó là lý do tôi đang sử dụng forkJoin trong lần đầu tiên địa điểm.

Có điều gì khác cần được thực hiện đối với BehaviorSubject để làm cho nó hoạt động với forkJoin không?

UPDATE:

Sau khi điều tra các RxJs docs một chút tôi càng nhận ra rằng Observable.combineLatest là tốt hơn phù hợp với nhu cầu của tôi hơn forkJoin ... liên kết ở đây trong mọi trường hợp đi qua này SO bài: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-combineLatest

Trả lời

6

Vấn đề là forkJoin kết hợp các quan sát khi chúng hoàn thành.

Trong đoạn mã đầu tiên của bạn, bạn đang tạo một quan sát bằng cách sử dụng of - trong đó, trên subscribe, ngay lập tức phát ra giá trị và sau đó hoàn tất.

Trong đoạn thứ hai của bạn, BehaviorSubject không hoàn thành. Nếu bạn gọi tới số complete, bạn sẽ thấy giá trị được ghi vào bảng điều khiển:

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

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

bs.complete(); 
+3

Cảm ơn bạn đã trả lời. Sau khi điều tra các tài liệu RxJs nhiều hơn một chút, tôi nhận ra rằng 'Observable.combineLatest' phù hợp hơn với nhu cầu của tôi hơn là' forkJoin' ... Liên kết ở đây trong trường hợp có bất kỳ bài viết nào trong SO này: http://reactivex.io/ rxjs/class/es6/Observable.js ~ Observable.html # static-method-combinedLatest – cboston

Các vấn đề liên quan