首页 > 编程语言 >Rxjs编程系列-操作符

Rxjs编程系列-操作符

时间:2023-03-10 15:45:13浏览次数:40  
标签:Observable let observer 编程 操作符 error Rxjs import

定义: 一个操作符是返回一个Observable对象的函数,不过,有的操作符是根据其他Observable对象产生返回
的Observable对象,有的操作符则是利用其他类型输入产生返回的Observable对象,还有一些操作符不需要输入
就可以凭空创造一个Observable对象。

1. 操作符分类

按功能分类

  • 创建类
  • 转化类
  • 过滤类
  • 合并类
  • 多播类
  • 错误处理类
  • 辅助工具类
  • 条件分支类
  • 数学和合计类

按特性分类

  • 背压控制类
  • 可连接类
  • 高阶Observable处理类

按挂载方式分类

  • 静态方法类
  • 实例方法类

2. 实现操作符

实现一个操作符需要考虑下面这些功能要点:

  • 返回一个全新的Observable对象
function map(project){
  return new Observable(observer => {
    this.subscribe({
      next: value => observer.next(project(value)),
      error: error => observer.error(error),
      complete: () => observer.complete()
    });
  });
}
  • 对上游和下游的订阅及退订处理
function map(project){
  return new Observable(observer => {
    const sub = this.subscribe({
      next: value => observer.next(project(value)),
      error: error => observer.error(error),
      complete: () => observer.complete()
    });
    return {
      unsubscribe: () => {
        sub.unsubscribe();
      }
    };
  });
}
  • 处理异常情况
function map(project){
  return new Observable(observer => {
    const sub = this.subscribe({
      next: value => {
        try {
          observer.next(project(value)),
        } catch(error){
          observer.error(error);
        }
      },
      error: error => observer.error(error),
      complete: () => observer.complete()
    });
    return {
      unsubscribe: () => {
        sub.unsubscribe();
      }
    };
  });
}

  • 及时释放资源

3. lettable/pipeable 操作符

  • let 操作符
    let的参数是一个函数$double,此函数返回一个Observable对象,$double函数同样接受一个Observable对象作为
    参数,因此let擦作符接受的就是一个以Observable对象作为参数并返回Observable对象的函数。
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/let';

const source$ = Observable.of(1, 2, 3);
const double$ = obs$ => obs$.map(x => x * 2);
const result$ = source$.let(double$);
result$.subscribe(console.log);

纯函数实现map操作符

function map(project){
  return function(obs$) {
    return new Observable(observer => {
      return obs$.subscribe({
        next: value =>  observer.next(project(value)),
        error: error => observer.error(error),
        complete: () => observer.complete()
      });
    });
  }
}
  • pipeable操作符
    凡事能够被let作为参数来使用的操作符实现方式就叫做lettable操作符,也叫pipeable操作符。
    let操作符和pipe操作符功能相同,建议使用pipe操作符。

使用pipe操作符

import {Observable} from 'rxjs/Observable';
import {of}  'rxjs/observable/of';
import {map, filter} 'rxjs/operators';

const source$ = of(1, 2, 3);
const result$ = source$.pipe(
  filter(x => x % 2 === 0),
  map(x => x * 2)
);

result$.subscribe(console.log);

使用let操作符

import {Observable} from 'rxjs/Observable';
import {of}  'rxjs/observable/of';
import {map, filter} 'rxjs/operators';
import 'rxjs/add/operator/let';

const source$ = of(1, 2, 3);
const result$ = source$
  .let(filter(x => x % 2 === 0))
  .let(map(x => x * 2));

result$.subscribe(console.log);

标签:Observable,let,observer,编程,操作符,error,Rxjs,import
From: https://www.cnblogs.com/xiaodi-js/p/17203563.html

相关文章

  • 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 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内置的四大核心函数式接口          其他接口  方法引用               构造使用......
  • 变量交换方法(使用按位异或操作符)
    按位异或操作符:^作用:一个整形在计算机中按二进制存储,按位异或即按二进制位将两个数对比,相同为0,相反为1;举例如下:1#include<stdio.h>23intmain()4{5......
  • UI编程基础
    UI界面编程框架JFrame//创建窗口对象JFramejf=newJFrame();//设置大小jf.setSize(x,y);//设置在屏幕中的位置jf.setLocation(x,y);//设置窗口可见jf.setVi......
  • c++编程,对2048小游戏的扩充
    原游戏网址:(210条消息)C++小游戏(原创)——2048_c++小游戏下载_Ziwen.紫闻的博客-CSDN博客源代码: #include<iostream>#include<stdlib.h>#include<time.h>#include<......