我正在阅读一篇关于 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/