RxJS réduit ne se poursuit pas

Pourquoi le modèle plat ne provoque-t-il pas de réductions en aval du feu?

J'ai eu un code comme:

handleFiles.flatMap(files => Rx.Observable.from(files). flatMap((file, i) => fileReader(file, i)). reduce((form, file, i) => { form.append('file[' + i + ']', result); console.log('reduce step', file); return form; }, new FormData()). tap(console.log.bind(console, 'after reduce')) ). subscribe(console.log.bind(console, 'response')); 

Et le problème est que le robinet «après réduction» n'est jamais touché. Pourquoi?

Le journal est comme:

 reduce step [data] reduce step [data] 

Capture d'écran:

Capture d'écran d'erreur

Le problème n'est pas dans flatMap ; Il est en train de reduce travaux.

Réduit reduce lectures dans un flux entier et le réduit à une seule valeur, émis uniquement lorsque le flux source est fermé. Si votre flux from(files) ne se termine pas, alors, reduce ne produira jamais sa valeur.

Essayez plutôt d'utiliser le scan ; Il émet chaque étape intermédiaire et semble être ce que vous recherchez.

Si les fichiers sont un tableau, la réduction devrait se terminer si l'observable renvoyé par FileReader le fait. Donc, pour ce code, le problème était que fileReader a renvoyé un observable qui n'a pas été complété.