RxJS减少不会继续

Hen*_*rik 6 javascript reactive-programming reactive-extensions-js rxjs

为什么flatMap不会导致下游减少火灾?

我得到的代码如下:

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'));
Run Code Online (Sandbox Code Playgroud)

而问题是"减少后"点击从未被击中.为什么?

日志如下:

reduce step [data]
reduce step [data]
Run Code Online (Sandbox Code Playgroud)

截图:

错误截图

Rya*_*edy 12

问题不在于flatMap; 这是在工作的方式reduce.

reduce读取整个流并将其减少为单个值,仅在源流关闭时发出.如果您的from(files)流未结束,则reduce永远不会输出其值.

尝试使用scan; 它发出每个中间步骤,似乎是你正在寻找的.


Hen*_*rik 2

如果 files 是一个数组,那么如果从 fileReader 返回的 observable 终止,那么reduce 应该终止。因此,对于这段代码,问题在于 fileReader 返回了一个未完成的可观察对象。