javascript - 如果没有匹配的累加器,RxJS 如何减少?

标签 javascript rxjs observable reactive-programming

我正在阅读一篇关于 Reactive Programming in JavaScript 的文章并且不确定那里列出的以下示例如何导致输出 27

import {Observable} from 'rxjs-es';

let output = Observable.interval(500)
             .map(i => [1,2,3,4,5,6][i]);

let result = output.map(num1 => num1)
    .filter(num1 => num1 > 4)
    .reduce((num1, num2) => num1 + num2);

result.subscribe(number => console.log(number));

Output --> 27

根据我的理解,每隔 500 毫秒,流 [1,2,3,4,5,6] 中的每个数字都会被一一过滤。因此,只有 5 和 6 能够通过过滤器。

但是,由于在处理过程中的任何给定点只有一个元素可用,我想知道 reduce 如何将结果累积为 27?

最佳答案

我已经把它翻译成 RxJs 6 但它没有输出 27

const { interval } = rxjs;
const { map, filter, reduce, take } = rxjs.operators;

let output = interval(500).pipe(
 map(i => [1,2,3,4,5,6][i]), // very strange way of adding one to the interval
 take(6) // had to add a take so observable would complete else reduce would never emit
);

let result = output.pipe(
  map(num1 => num1), // Does nothing
  filter(num1 => num1 > 4), // filters out those less than 5
  reduce((num1, num2) => num1 + num2) // add the leftovers 5 and 6
);

result.subscribe(number => console.log(number)); // 11 is the output
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.2/rxjs.umd.min.js"></script>

关于javascript - 如果没有匹配的累加器,RxJS 如何减少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63605677/

相关文章:

angular - Firebase:应在 Angular 项目中使用 Promise 还是 Observable?

javascript - Bootstrap - 使用 jquery 进行图标切换

javascript - 我可以在哪里进行 JavaScript 协作,类似于 CodeHS

redux-observable 使用 RxJS 为 ajax 调用发出进度 Action

javascript - Angular 映射 http 响应值与另一个 http 调用

javascript - ActivatedRoute paramMap observable 发出两次值/两次触发 - Angular 4

javascript - WebGL "ERROR: unsupported shader version"

javascript - 使用输入文本的 Bootstrap 下拉菜单

angular - 如何在 Angular 6 中使用 rxjs fromEvent 定位 HTML 元素

angular - 以 Angular 订阅后如何执行某些操作