IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 2021-11-08 -> 正文阅读

[JavaScript知识库]2021-11-08

Rxjs概述

Angular中集成了Rxjs库,Rxjs是javascript的一个响应式编程库,它提供了很多api,可以很方便的处理和操作应用中的数据。

Rxjs的内容可以概括为一个核心三个重点,核心就是ObservableOperators,三个重点分别是:

  • observer 回调函数的集合,它知道如何去处理observable上产生的值或者事件,包括异常
  • Subject 相当于一个事件发射器,允许将相同的值传递给多个订阅者
  • schedulers 协调observable上数据的发射方式

简单的例子

下边用一个简单的例子来展示下Rxjs如何工作

var observable = Observable
    .create(function(observer) {
        observer.next('Suzuki'); 
        observer.next('Honda');
        observer.next('Kawasaki');
    })

console.log('start');
// 订阅 observable    
observable.subscribe(function(value) {
    console.log(value);
})
console.log('end');

结果为:

start
Suzuki
Honda
Kawasaki
end

通过Observable身上的create方法可以创建一个Observable,参数中的回调函数设置这个Observable将会传递值,然后通过subscribe订阅这个Observable。

Rxjs的operators

operarors是Rxjs的关键,大致分为8类:

选择器类:take first last takeLast
创建observable类:create of from fromEvent fromPromise never empty throw interbal timer
控制数据流类: takeUntil skip startWith concat merge delay delaywhen throttle debounce distinct distinctUntilChanged
错误处理:catch retry retryWhen
操作数据:scan repeat
协调多个observable:combineLatest withLatestFrom zip switchMap mergeMap concatMap
改变数据流结构:concatAll mergeAll
缓存类:buffer window windowToggle

这里只讲两个接下来要用到的控制数据流类 debounce(防抖)和throttle (节流)

什么是防抖(debounce)?

触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;

什么是节流(throttle)?

高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率。

debounceTime

debounce 在每次收到元素,他会先把元素 cache 住并等待一段时间,如果這段时间內已经沒有收到任何元素,则把元素送出;如果这段时间內又收到新的元素,则会把原本 cache 住的元素释放掉并重新计时,不断反复。

var example = interval(300).pipe(take(5),debounceTime(1000));// take(5)表示执行五次(0-4)

example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});
// 4  
// complete

throttleTime

跟 debounce 的不同是 throttle 会先开放送出元素,等到有元素被送出就会沉默一段時间,等到时间过了又会继续发送元素,防止某个事件频繁触发,影响效率。

var example = interval(300).pipe(take(5),throttleTime(1000)); 
example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});
// 0
// 4
// complete

对输入框进行防抖/节流处理

防抖:<input type="text" id="debounce"/><br/>
节流:<input type="text" id="throttle"/>
<script>
    var $debounce = document.getElementById('debounce');
    var $throttle = document.getElementById('throttle');
    const debounce$ = Rx.Observable.fromEvent($debounce, 'input');
    const throttle = Rx.Observable.fromEvent($throttle, 'input');
    // 节流
    debounce$
        .debounceTime(1000)
        .subscribe(function (e) {
            var value = e.target.value;
            console.log('防抖:'+value)
        });
    // 防抖
    throttle
        .throttleTime(1000)
        .subscribe(function (e) {
            var value = e.target.value;
            console.log('节流:'+value)
        });
</script>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:23:29  更:2021-11-09 19:24:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 10:12:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码