RxJS减少不会继续

RxJS减少不会继续

问题描述:

为什么flatMap导致下游减少触发?RxJS减少不会继续

我有这样的代码:

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')); 

而问题是,“减少后”水龙头从来没有击中。为什么?

日志是这样的:

​​

截图:

Error screenshot

如果文件是一个数组,那么如果从fileReader返回的可观察元素有效,则reduce应该终止。所以对于这段代码,问题在于fileReader返回了一个没有完成的observable。

的问题是不是在flatMap;它的方式reduce的作品。

reduce在整个流中读入并将其减少为单个值,仅当源流关闭时才发出。如果您的from(files)流没有结束,那么reduce将永远不会输出它的值。

尝试使用scan代替;它发出每一个中间步骤,似乎是你在找什么。

+0

文件是一个JS数组,简单明了。我添加了一个截图。我之前已经扫描过,但确实工作...但是因为它是一个JS数组聚合应该做onComplete,对吧? – Henrik

+0

然而,这是一个很好的结果。我发现我的错误;没有完成fileReader中的主题。咄! – Henrik