如何解决如果没有匹配的累加器,RxJS如何减少?
我正在浏览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,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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。