2015-01-31 10 views
6

İki veri akışım olduğunu düşünün, bunları birleştirmenin ve bu iki akış arasındaki veri koşullarını uygulamanın bir yolu var mı? Örneğin,İki akış nasıl birleştirilir (boş olmayanlar) ve koşullar çiftler nasıl uygulanır?

Yukarıda rxjs kullanarak nasıl birleşik akış elde edilir? Bazı bildirimleri yükseltmek için oluşturulmuş akışlarla ilgili koşulları uygulamak istiyorum. Ayrıca, bilinen son null olmayan veriyi kullanmak mümkün olabilir, örneğin aşağıdaki birleştirilmiş akışa bakınız.

Stream A : A, B, C, D.... 
Stream B : 1, null, 2, null.... 
Composed : (A,1),(B,1),(C,2),(D,2).... 

Sadece reaktif akışları fikrini yanlış anladın eğer öyleyse düzelt lütfen, reaktif akışları fikri ile oynamaya başladım.

+0

Dunno, RxJS'de tam olarak nasıldır, ancak genel olarak ilk sorun genellikle "zip" ile çözülür, ardından iki akış bir çift akışı olarak birleştirilir. Dunno tekrar ikinci sorunun nasıl çözülmesi gerektiğini. –

cevap

11

Teklifinize sunulabilecek iki operatör vardır.

Zip: RxJs için
Rx Zip
Referans: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/zip.md

CombineLatest: RxJs için
Rx CombineLatest
Referans: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/combinelatest.md

görüntüleri arasındaki farkları açıklar her ikisi de. Şimdi, gözlemlenebilen değerleri birleştirdiniz, sadece where kullanarak filtrelemeniz gerekiyor, bu değerlerden biri boşsa filtreleyecek.

Stream A : A, B, C, D, E.... 
Stream B : 1, null, 2, null, 3.... 
Composed : (A,1),(B,1),(C,2),(D,2).... 

Eğer Zip kullanırsanız ve Nerede (sonra boş değerler filtreleme), sonuç olacaktır:

Composed: (A,1),(C,2),(E,3) 

kullanırsanız

Maalesef ne operatörler açıkladığınız bu davranışı elde edebilirsiniz ve Zip (boş önce değerleri filtreleme) halinde, sonuç olarak elde edilecektir:

Composed: (A,1),(B,2),(C,3) 

Eğer CombineLatest olaylar Akışları olur bu emrin bağlıdır ve elbette olacaktır kullanırsanız where operatörü koyacağız nerede, sonuç farklı olabilir size gösterilen ne örn:

Stream A : A, B, C, D.... 
Stream B : 1, null, 2, null.... 
Composed : (A,1),(B,1),(C,1),(C,2),(D,2).... // OR 
Composed : (A,1),(B,1),(B,2),(C,2),(D,2).... 

Sürece Daha özel gereksinimleri var, bence bahsettiğim seçeneklerden biri aradığınız şey, bilgi eklemek için çekinmeyin.

gözlemlenebilir 's oluşturmak için çeşitli yollar, belirtilmeyen diğer operatörler şunlardır vardır:

  • distinctUntilChanged, zip veya en son sadece bir kısmı için sınırlamak için anahtar seçici işlevini kullanarak, kompozisyon finalinde eklenebilir değer.
  • switch, bir diğerinin içinde gözlenebilir olanı birleştirmek için kullanılır.