2016-10-20 16 views
8

Observable.forkJoin kullanmaya çalışıyorum ve abone işleyici asla vurulmuyor. ForkJoin operatörü benim app diğer bölümlerinde benim için çalışıyor ve çalışma dışı senaryoda düşünebildiğim tek fark, asObservable() işlevini kullanarak gözlenebilirlerin BehaviorSubject nesnelerinden oluşturulmalarıdır.BehaviorSubject öğesinden oluşturulan Angular 2 rxjs gözenekleri forkJoin ile çalışmıyor

Bu abone

let obs = Observable.of(1); 

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

çarparsa Bu seferki Ben ilk forkJoin kullanıyorum neden olan birden fazla obseravble var benim gerçek kullanım durumunda Tabii ki hayır

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

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

yapar yer.

ForkJoin ile çalışmasını sağlamak için BehaviorSubject'e yapılması gereken başka bir şey var mı?

GÜNCELLEME:

RxJs docs araştırdıktan sonra biraz daha ben Observable.combineLatest çok daha uygun forkJoin daha ihtiyaçlarımı olduğunu fark ... Bağlantı burada durumunda herhangi bu SO sonrası karşısına çıkıyor: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-combineLatest

cevap

6

Sorun, tamamlandıklarında forkJoin'un gözlenebilirlere katılmasıdır.

İlk snippet'inizde, of kullanarak gözlemlenebilir bir görünüm oluşturuyorsunuz. Bu, subscribe numaralı telefona hemen bir değer yayar ve sonra tamamlar.

İkinci snippet'inizde BehaviorSubject tamamlanmadı. complete numaralı telefonu arayacak olursanız, konsola bağlanmış değeri görürsünüz:

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

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

bs.complete(); 
+3

Yanıt için teşekkürler. RxJs docs araştırdıktan sonra biraz daha fazla 'Observable.combineLatest'' forkJoin' daha benim gereksinim için çok daha uygun olduğunu fark ettim ... Bu SO posta karşısında herhangi bir sorun geldiğinde burada bağlantı: http://reactivex.io/ rxjs/sınıf/ES6/Observable.js ~ Observable.html # statik yöntem-combineLatest – cboston