2017-07-19 8 views
3

Ich versuche zu verstehen, wie funktioniert der combineAll-Operator. ich das folgende Beispiel aus der offiziellen Dokumentation mit:RxJS combineAll Operator, Erklärung

const source = Rx.Observable.interval(1000).take(2); 
const example = source.map(val => Rx.Observable.interval(1000).map(i => `Result (${val}): ${i}`).take(5)); 
const combined = example.combineAll(); 

Der Ausgang ist dann:

["Result (0): 0", "Result (1): 0"] 
["Result (0): 1", "Result (1): 0"] 
["Result (0): 1", "Result (1): 1"] 
["Result (0): 2", "Result (1): 1"] 
["Result (0): 2", "Result (1): 2"] 
["Result (0): 3", "Result (1): 2"] 
["Result (0): 3", "Result (1): 3"] 
["Result (0): 4", "Result (1): 3"] 
["Result (0): 4", "Result (1): 4"] 

warum auf Figur Probieren, machte ich dieses einfache Schema:

combineAll Scheme

Aus der Dokumentation, ich lese, dass jedes Mal, wenn eine der inneren Observable einen Wert ausgibt, dann dieser emittierte Wert kombiniert wird um den letzten Wert aller anderen inneren Observablen.

In dem Schema oben, können wir sehen, dass 10 Werte während der Zeit durch die innere Observable emittiert werden, so erwarte ich eine Ausgabe mit 10 Werten über die Zeit zu erhalten, aber es ist 9.

Auch in die erste Zeile des Ausgangs:

["Result (0): 0", "Result (1): 0"]) 

Ist die 0 von ‚(1): 0‘ entspricht einen Nullwert? Weil die beobachtbare "innere 2" noch nichts emittiert hat?

hier zu beenden ist, was ich als Ausgabe erwartet:

["Result (0): 0", "Result (1): 0"] 
["Result (0): 1", "Result (1): 0"] 
["Result (0): 1", "Result (1): 0"] 
["Result (0): 2", "Result (1): 0"] 
["Result (0): 2", "Result (1): 1"] 
["Result (0): 3", "Result (1): 1"] 
["Result (0): 3", "Result (1): 2"] 
["Result (0): 4", "Result (1): 2"] 
["Result (0): 4", "Result (1): 3"] 
["Result (0): 4", "Result (1): 4"] 

Es ist offensichtlich falsch, aber ich meinen Fehler nicht finden, könnte jemand erklären?

Antwort

2

Bedenken Sie, dass combineAll:

ein beobachtbares-of-Observable flacht durch combineLatest Anwendung, wenn die beobachtbaren-of-Observable abgeschlossen ist.

Und das combineLatest;

wird tatsächlich warten, bis alle Eingang Observables mindestens einmal emittieren.

So ist die erste Emission aus dem combineAll beobachtbaren, die den ersten Wert des „Inner 1“ beobachtbaren gehen ist nicht einschließt, bis die „Inner 2“ beobachtbaren emittiert seinen ersten Wert passieren. Es wird also nur neun Emissionen geben - nicht zehn.

+0

Vielen Dank! Das habe ich vermisst – Bil5

Verwandte Themen