2016-04-26 14 views
8

Aşağıdaki iki olay akışını göz önünde bulundurun. Her olayın bir zaman damgası/ts ve değer özelliği vardır.Ortak etkinlik özelliğinde iki olay akışına nasıl katılır?

Input stream

ben değeri, uygulanan transformasyon ile elde edilen akımı içine, etkinlik, aynı zaman damgaları, bu iki akım birleştirmek istiyorum. Bir akışta bir zaman damgası eksikse (aşağıdaki örnekte sarı ts=3 gibi), bu zaman damgası göz ardı edilmelidir.

enter image description here

reaktif bir programlama kütüphanesi gibi xstream veya rxjs kullanarak sorunu çözmek ister misiniz. Reaktif programlama kavramlarına oldukça yeniyim, ama başka bir öneri varsa hepsi benim kulakım. Teşekkürler!

+2

Sadece şemalarınızı seviyorum !! Sorununuz hakkında, genel olarak zordur, yani sipariş vermeyi garanti edemediğiniz sürece, eşleştirmeyi yapmak için tüm akışı görmeniz gerekir (yani zamanın zamana bağlı fonksiyonunu arttırmak, yani hiçbir değer siparişten çıkar). Aksi takdirde 'join' operatörü – user3743222

+0

kullanarak yapılabilir. Teşekkürler :) Muhtemelen zaman damgalarının her zaman artan sırada geldiğini varsayabiliriz. – hampusohlsson

+0

da tüm değerler farklı zaman damgaları – user3743222

cevap

3

Sadece birleştiriciyi kullanın ve yalnızca eşleşen zaman damgası olan kombinasyonları iletin. Diğer kombinasyonlar daha sonra filtreleyebileceğiniz null ile eşlenir.

İşte xstream içinde çözüm:

var streamOut = xs.combine(
    (a, b) => { 
    if (a.ts === b.ts) { 
     return {ts: a.ts, value: a.value + b.value}; 
    } else { 
     return null; 
    } 
    }, 
    streamA, streamB 
).filter(x => x !== null); 

JSBin içinde çalışmasını kontrol edin: https://jsbin.com/saxawatuza/edit?js,console.

+0

Çok temiz bir çözüm. Teşekkür ederim! – hampusohlsson

+0

ile ilgili olmayan bir yorum, Andre, OP 'xtream' akış kütüphanesi ile ilgisi olmayan xstream' etiketini kullandı. Bunun için belirli bir etiket olması güzel olurdu. – user3743222

+0

@ user3743222 Katılıyorum –

İlgili konular