2017-10-11 4 views
2

Que se passe-t-il avec l'appel concat? Je sais que si je remplace concat par merge le code fonctionne correctement et la sortie est foobarquxquux. J'ai lu sur les observables Hot et Cold, et je sais que pour les observables chauds qui pourraient arriver si les valeurs sont générées avant l'abonnement, mais mes observables là-bas sont cold, donc je suppose que ce n'est pas le cas.RxJS observable concat ne fonctionne pas

const Rx = require('rxjs'); 

const observable1 = Rx.Observable.create((observer) => { 
    observer.next('foo'); 
    observer.next('bar'); 
    return observer; 
}); 
const observable2 = Rx.Observable.create((observer) => { 
    observer.next('qux'); 
    observer.next('quux'); 
    return observer; 
}); 
const result1 = observable1.concat(observable2); 
result1.subscribe((x) => console.log(x)); 

// outputs 
foo 
bar 

https://codepen.io/thiagoh/pen/WZyrRL

Répondre

2

Je crois observer1 doit complete(), alors concat peut commencer à produire observer2.

Ammended CodePen

+0

Merci. Avez-vous une source pour confirmer/expliquer pourquoi cela est nécessaire? – thiagoh

+1

@thiagoh c'est un comportement normal de la méthode 'concat()'. 'Abonnez-vous aux observables dans l'ordre que ** précédent complète **, émettre des valeurs.' - https://www.learnrxjs.io/operators/combination/concat.html –

+0

Les diagrammes de marbre sont également une bonne aide visuelle [Concat ] (http://reactivex.io/documentation/operators/concat.html) –