2016-05-31 23 views
6

yayar. Durumumun yaygın olduğunu umuyorum ama uygun bir şey bulamıyorum. Ne Angular2/RxJS 5 yılında, ulaşmak istediğiniz şudur: YaniKaynağından bir sonraki değeri yayma Gözlemlenebilir başka bir Gözlemlenebilir olduğunda, bildirici,

source: ---1--2--3--4---------5--------6-|--> 
notifier: -o------------o-----o---o--o-o------> 
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
output: ---1----------2-----3---4--5---6-|--> 

, ben değerleri yayar gözlemlenebilir bir kaynak var ve çıkış içine almak için her biri sadece istediğiniz zaman (diyoruz ikinci gözlemlenebilir notifier) ​​yayar. Bildirim aracından gelen "bir sonraki geçişe izin ver" anlamına gelen bir olay gibi.

delayWhen'u denedim, ancak bununla ilgili temel sorun, tüm kaynak değerlerinin bildiriciden aynı bir olayı beklemesidir, örneğin 3 kaynak değeri "sıraya alındı" ve notifier bir kez yandığında, tüm 3 değerleri içinden geçmek istediğim şey değil.

cevap

2

cevap zip geçerli::

const valueStream = 
    Rx.Observable.from([0, 1, 2, 3, 4, 5, 6]); 

const notificationStream = 
    Rx.Observable.interval(1000).take(7); 


Rx.Observable 
    .zip(valueStream, notificationStream, (val, notification) => val) 
    .subscribe(val => console.log(val)); 

örnek here Çalışma

de bu soruya bakın.

Bu, her iki akıştan bir çift üretildiğinde bir değer üretir. Bu nedenle, notificationStream bir değer ürettiğinde, örnek valueStream değerini yazdıracaktır.

1

Ben zip operatörü aradığınızı olduğunu düşünüyorum: https://plnkr.co/edit/MK30JR2qK8aJIGwNqMZ5?p=preview:

sourceSubject:Subject = new Subject(); 
notifierSubject:Subject = new Subject(); 

index = 1; 

constructor() { 
    Observable.zip(
    this.sourceSubject, this.notifierSubject 
) 
    .map(data => data[0]) 
    .subscribe(data => { 
    console.log('>> output = '+data.id); 
    }); 
} 

emit() { 
    this.sourceSubject.next({id: this.index}); 
    this.index++; 
} 

notify() { 
    this.notifierSubject.next(); 
} 

bu plunkr bakın.