RxJS过滤数据流操作符学习 (Filtering Operators)
2021-04-14 01:25
标签:alc 功能 const 不能 lte output until taf screenx 很多时候,上游Observable对象吐出的数据,并不是下游关心的,这个时候我们需要把不需要的数据,过滤掉。在RxJS中,提供了这类过滤操作符来实现这种功能。 过滤类操作符最基本的功能就是对一个给定的数据流中的每个数据判断是否满足某个条件,如果满足就传递给下游,如果不满足就抛弃。 判断一个数据是否有资格进入下游,是根据 “判定函数”的返回值, true代表可以进入下游,否则就会被淘汰。 有的过滤类操作符还可以接受一个函数参数“结果选择器”,用来制定数据给下游,比如: 和Array.prototype.filter()很像,看一下使用方法, filter 只能做过滤,不能做结果转化 first和last first 方法可以接受2个参数,分别是判定函数,没有值得时候,传给下游的值。 first 没有判定函数的时候, 吐出第一个符合条件的值。 take 一族操作符 take就是“拿”,从上游Observable拿数据,拿够了就完结,?于怎么算“拿够”,由take的参数来决定,take只?持?个参数count,也就是限定拿上游Observable的数据数量。 take的其他兄弟 skipWhile 和 skipUntil skipWhile 和takeWhile一样接受一个判定函数 所谓的回压控制,可以理解为上游的数据比较多,流入下流的时候,由于太多了,造成了拥堵,为了能够流畅的流到下游,抛弃一些数据。 throttle 和 debonuce、audit、sample sampleTime 和 sample signal RxJS过滤数据流操作符学习 (Filtering Operators) 标签:alc 功能 const 不能 lte output until taf screenx 原文地址:https://www.cnblogs.com/coppsing/p/12380978.html1. 过滤类操作符的模式
function resultSelector(value,index){
return [value,index]
}
import {fromEvent} from 'rxjs';
import {filter} from 'rxjs/operators';
const clicks = fromEvent(document,'click');
const clicksOnDivs = clicks.pipe(
filter(ev=>ev.target.tagName === "DIV")
)
clicksOnDivs.subscribe(x=>console.log(x));
// MouseEvent?{isTrusted: true, screenX: 98, screenY: 207, clientX: 98, clientY: 103,?…}
import {fromEvent} from 'rxjs';
import {filter,first} from 'rxjs/operators';
const clicks = fromEvent(document,'click');
const clicksOnDivs = clicks.pipe(
first(ev=>ev.target.tagName === "DIV")
// first()
)
clicksOnDivs.subscribe(x=>console.log(x));
import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
const intervalCount = interval(1000);
const takeFive = intervalCount.pipe(take(5));
takeFive.subscribe(x => console.log(x));
// 0
// 1
// 2
// 3
// 4
import { fromEvent, interval } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
const source = interval(1000);
const clicks = fromEvent(document, 'click');
const result = source.pipe(takeUntil(clicks));
result.subscribe(x => console.log(x));
// 0 1 2 遇到click就停止。
import { interval, fromEvent } from 'rxjs';
import { skipUntil } from 'rxjs/operators';
const intervalObservable = interval(1000);
const click = fromEvent(document, 'click');
const emitAfterClick = intervalObservable.pipe(
skipUntil(click)
);
// clicked at 4.6s. output: 5...6...7...8........ or
// clicked at 7.3s. output: 8...9...10..11.......
const subscribe = emitAfterClick.subscribe(value => console.log(value));
2. 回压控制
通过损失掉一些数据让流入和处理的速度平衡。
Rxjs提供了操作符来实现有损的回压控制,就是解决丢弃以及如何丢弃数据。
3. 其他过滤方式
下一篇:往码云上传自己的项目
文章标题:RxJS过滤数据流操作符学习 (Filtering Operators)
文章链接:http://soscw.com/essay/75435.html