15_Rxjs

简介: 15_Rxjs

Rxjs是JavaScript的一个扩展,基于观察者模式

观察者模式和发布订阅系统的区别

观察者模式定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知,中间没有第三方作为调度中心,依赖和被依赖方是直接“对话“的。

发布订阅系统有一个“中间商”,一般被称为调度中心或事件通道,用以过滤发布者的信息并维持发布者和订阅者之间的关系

Rxjs主要由三部分组成:

  1. Observable 被观察的对象
  2. subscription 监听Observable的变化
  3. Operators   一些函数,可以处理管道的数据

接下来我们创建一个简单的Observable—subscription关系

import { Observable } from 'rxjs'
// new 一个observable对象,该对象的构造器接收一个回调函数用于发布内容
const observable = new Observable((subscribe) => {
  subscribe.next(1)
  subscribe.next(2)
  subscribe.next(3)
  // 支持异步写法
  setTimeout(() => {
    subscribe.next(4)
    // complete方法指示通知完成,不支持传入参数
    subscribe.compete()
  }, 2000)
})
// observable上有一个subscribe方法,该方法接收一个配置对象
observable.subscribe({
  // 所有next方法发布的内容都会按顺序被传到这个函数
  next: (value) => {
    console.log(value)
  },
})

看看这个next,很像迭代器对吧? ——小满zs

import { Observable, of, interval, take } from 'rxjs'
// 这里subscribe接收一个回调函数,可以直接接收到发布的内容
interval(50).pipe(take(5)).subscribe(value => {
    console.log(value)
})

函数

功能

of

接收若干number类型参数,用next()方法分别将这些参数发布出去

interval

类似循环定时器,接收一个number类型的参数指定next方法调用的时间间隔。序列从0开始发送,如果不施加外力会一直进行下去

take

接收一个number类型的参数确定next方法调用的次数,通常和interval方法共用

除了上述API,管道中还可以添加其他处理函数实现不同功能

import { Observable, of, interval, take } from 'rxjs'
import { filter, map } from 'rxjs/operators'
const subs = interval(500).pipe(retry(3),map(v => ({ num:v })),filter(v => v.num % 2 == 0)).subscribe(value => {
    console.log(value)
    if(value.num == 10){
        subs.unsubscribe()
    }
})

函数

功能

map

同JavaScript中的map,将返回值封装成一个数组后返回

filter

同JavaScript中的filter,检查每个元素是否通过测试,通过则返回

retry

接收一个number类型的参数,作用是如果pipe方法之前的代码抛出错误,retry会再次尝试执行n次出错的代码,通常在pipe之前的方法需要请求接口时使用

import { Observable, of, interval, take, fromEvent } from 'rxjs'
import { filter, map, retry } from 'rxjs/operators'
const click$ = fromEvent(document, 'click').pipe(map((v) => v.target))
click$.subscribe((e) => {
  console.log(e)
})

fromEvent是一个用于监听DOM事件的函数,该函数接受两个参数,第一个是document对象,第二个是事件名。它返回一个事件观察者对象,可以通过这个对象的subscribe方法查看事件参数e。formEvent同样支持在管道流中进行逻辑处理

目录
相关文章
|
存储 缓存 JavaScript
RxJS 是前端开发的未来吗?
RxJS 是前端开发的未来吗?
82 0
|
JavaScript 前端开发 算法
RxJS系列06:测试 Observable
RxJS系列06:测试 Observable
113 0
|
存储 JavaScript 前端开发
RxJS系列02:可观察者 Observables
RxJS系列02:可观察者 Observables
110 0
|
JavaScript API
小满nestjs(第十五章 nestjs 和 RxJs)
nterval 五百毫秒执行一次 pipe 就是管道的意思 管道里面也是可以去掉接口的支持处理异步数据 去处理数据 这儿展示 了 map 和 filter 跟数组的方法是一样的 最后 通过观察者 subscribe 接受回调
145 0
小满nestjs(第十五章 nestjs 和 RxJs)
探秘 RxJS Observable 为什么要长成这个样子?!
我们都知道 RxJS Observable 最基础的使用方法:是建立 Observable,即调用 .create API
|
前端开发 JavaScript API
继续解惑,异步处理 —— RxJS Observable
Observable 可观察对象是开辟一个连续的通信通道给观察者 Observer,彼此之前形成一种关系,而这种关系需要由 Subscription 来确立,而在整个通道中允许对数据进行转换我们称为操作符 Operator。
|
JavaScript 前端开发 调度
你会用RxJS吗?【初识 RxJS中的Observable和Observer】
概念 RxJS是一个库,可以使用可观察队列来编写异步和基于事件的程序的库。 RxJS 中管理和解决异步事件的几个关键点: Observable: 表示未来值或事件的可调用集合的概念。 Observer: 是一个回调集合,它知道如何监听 Observable 传递的值。 Subscription: 表示一个 Observable 的执行,主要用于取消执行。 Operators:** 是纯函数,可以使用函数式编程风格来处理具有map、filter、concat、reduce等操作的集合。
151 0
|
前端开发 JavaScript API
Rxjs源码解析(一)Observable
学习一个库最好的方法就是看其源码,理解其 api 的调用原理,用起来自然也就很清楚自己到底在干什么了,秉持着此观念,为了更好地理解 rxjs,抽空将其源码看了一遍 本文章不会刻意涉及概念性的东西,主线就是解读源码,并在恰当的时候给出一些小例子,源码基于 rxjs v7.4.0 版本
337 0
|
数据采集 消息中间件 JSON
全面拥抱 Reactivity: RxJS, RSocket & Svelte
在 Reactive 社区,RxJS 还是最核心的底层框架,发挥着重大作用,第十五届 D2 前端技术论坛,将会邀请 RxJS 作者 Ben Lesh 进行《重构 RxJS 架构:我们如何让其更小、更快》的主题演讲,Ben 会就其 RxJS 的开发经验和大家分享一下他的经验,相信大家一定会有新的收获。
全面拥抱 Reactivity: RxJS, RSocket & Svelte
|
JSON JavaScript 前端开发
一起来看 rxjs
## 更新日志 - 2018-05-26 校正 - 2016-12-03 第一版翻译 ## 过去你错过的 Reactive Programming 的简介 你好奇于这名为Reactive Programming(反应式编程)的新事物, 更确切地说,你想了解它各种不同的实现(比如 [Rx*], [Bacon.js], RAC 以及其它各种各样的框架或库) 学习它比较困难, 因为
1168 0