首页 > 编程语言 >Rxjs编程系列-基本概念

Rxjs编程系列-基本概念

时间:2023-03-10 15:45:40浏览次数:33  
标签:Observable const observer 编程 next Rxjs console 基本概念 onSubscribe

Rxjs 就是利用javascript实现了响应式编程的概念,利用监听流的模式处理异步操作。

1. 函数响应式编程

函数式编程

  • 声明式
  • 纯函数
  • 数据不可变性

响应式编程

  • 通过可监听流实现异步编程

2. Observable 和 Observer

Rxjs中的数据流就是Observable对象,它是被观察者也是数据发布者,通过subscribe函数链接
观察者Observer。当Observable 对象产生数据流时,观察者Observer就会捕捉到。Rxjs结合了
观察者模式和迭代者模式:Observalbe = Publisher + Iterator.

  • 创造Observable
// 导入Observable类
import {Observable} from 'rxjs';

// 定义Obervable对象的行为
// observer参数为 theObserver 封装后的一个代理
const onSubscribe = observer => {
   // 调用observer的next函数将数据推送给theObserver
   observer.next(1);
   observer.next(2);
   observer.next(3);
};

// 创建数据流对象
const source$ = new Observable(onSubscribe);

// 定义观察者
const theObserver = {
  next: item => console.log(item)
};

// 将数据流对象与观察者关联起来
source$.subscribe(theObserver);
  • 间隔一秒推送一个数据
const onSubscribe = observer => {
  let number = 1;
  const handle = setInterval(() => {
    observer.next(number++);
    if(number > 3){
      clearInterval(handle);
    }
  }, 1000);
};
  • Observable 的完结
    通过在观察者observer中增加complete函数实现,并在Observable的onSubscribe参数函数
    中调用实现推送数据完毕的通信。
const theObserver = {
  next: item => console.log(item),
  complete: () => console.log('No More Data')
};

const onSubscribe = observer => {
  let number = 1;
  const handle = setInterval(() => {
    observer.next(number++);
    if(number > 3){
      clearInterval(handle);
      observer.complete();
    }
  }, 1000);
};
  • Observable 的出错处理
    通过增加观察者的error函数进行错误处理
import {Observable} from 'rxjs';
const onSubscribe = observer => {
  observer.next(1);
  observer.error('something wrong');
  observer.complete();
};
const source$ = new Observable(onSubscribe);
const theObserver = {
  next: item => console.log(item),
  error: err => console.log(err),
  complete: () => console.log('No more Data')
};
source$.subscribe(theObserver);
  • Observer 的简单形式
source$.subscribe(
  item => console.log(item),  // 接受推送的数据
  err => console.log(err),  // 出错处理
  () => console.log('No more Data') // 完结处理
);

3. 退订Observable

Observable 通过subscribe函数与Observer建立联系,如果要断开关系则需要通过在Obervable的参数函数
onSubscribe 中返回对象方法unsubscribe来实现。取消订阅后,被观察者对象虽然没有完结,但是观察者
将无法再接收到推送的数据。

const onSubscribe = observer => {
  let number = 1;
  const handle = setInterval(() => {
    observer.next(number++);
  }, 1000);
  return {
    unsubscribe: () => {
      clearInterval(handle);
    }
  };
};

const source$ = new Observable(onSubscribe);
const subscription = source$.subscribe(item => console.log(item));
// 3.5s 后取消订阅
setTimeout(() => {
  subscription.unsubscribe();
}, 3500);

4. Hot Observable 和 Cold Obervable

  • Hot Observable: 每次订阅都已经有一个'热' 的生成者准备好了, 每个观察者由于订阅时间节点不同
    后订阅的观察者会错过一些数据。
const producer = new Producer();
const hot$ = new Observable(observer => {
  // 然后让observer 去接受producer产生的数据
});
  • cold Observable: 每次订阅都产生一个新的生产者, 所有观察者得到推送的数据都是一样的
const cold$ = new Observable(observer => {
  const producer = new Producer();
  // 然后让observer 去接受producer产生的数据
});

5. 操作符

在Rxjs中,有一系列用于产生Observable函数,这些函数有的凭空创造Observable对象,有的根据外部数据源
产生Obervable对象,更多的是根据其他的Observable中的数据来产生新的Observable对象,也就是把上游数据
转化为下游数据,所有这些函数统称为操作符。

  • 使用map操作符
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';

const onSubscribe = observer => {
  observer.next(1);
  observer.next(2);
  observer.next(3);
};
const source$ = Observable.create(onSubscribe);
source$.map(x => x*x).subscribe(console.log);   // 1, 4 ,9

标签:Observable,const,observer,编程,next,Rxjs,console,基本概念,onSubscribe
From: https://www.cnblogs.com/xiaodi-js/p/17203553.html

相关文章

  • Rxjs编程系列-操作符
    定义:一个操作符是返回一个Observable对象的函数,不过,有的操作符是根据其他Observable对象产生返回的Observable对象,有的操作符则是利用其他类型输入产生返回的Observable......
  • swift 函数编程
    读入一个文本,确定所有单词的使用频率并从高到底排序,打印出所有单词以及其频率列表先不解决频率问题先看下不使用高阶函数//:AUIKitbasedPlaygroundforpresentinguse......
  • pugixml XML格式处理库的介绍和使用(面向业务编程-格式处理)
    pugixmlXML格式处理库的介绍和使用(面向业务编程-格式处理)介绍pugixml是一个轻量级的C++XML处理库。它的特点:类似dom的界面,具有丰富的遍历/修改功能非常快速的非......
  • 开源量子计算编程框架软件介绍
    1.编程框架简介​在编程领域,软件框架是指一种抽象形式,它提供了一个具有通用功能的软件,这些功能可以由使用者编写代码来有选择的进行更改,从而提供服务于特定应用的软件。可......
  • 网络编程
    网络编程实现网络编程的三个要素:使用IP地址(准确的定位网络上的一台或多台主机);使用端口号(定位主机上的特定的应用);使用网络通信协议(可靠,高效的传输数据);IPv4地址:是一个3......
  • 实验1 Python开发环境使用和编程初体验
    实验任务1“关于print”task1_1:实验源码:#task1_1print的使用print('hey,u')#输出单个字符串或者单个变量print('hey','u')x,y,z=1,2,3print(x,y,z)#输出多......
  • 操作系统——基本概念
    1操作系统的基本概念1.1操作系统的概念、功能和目标1.1.1操作系统的定义操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源......
  • 实验1 Python开发环境使用和编程初体验
    #实验任务1#1.1.py#用法1print('hey,u')#用法2print('hey','u')x,y,z=1,2,3print(x,y,z)#用法3print('x=%d,y=%d,z=%d'%(x,y,z))print('x={},y={},z={}'.for......
  • java8新特性/函数式编程/lamda/stream流
    新特性简介   java8内置的四大核心函数式接口          其他接口  方法引用               构造使用......
  • UI编程基础
    UI界面编程框架JFrame//创建窗口对象JFramejf=newJFrame();//设置大小jf.setSize(x,y);//设置在屏幕中的位置jf.setLocation(x,y);//设置窗口可见jf.setVi......