美文网首页工作生活
深入浅出Rxjs笔记 二

深入浅出Rxjs笔记 二

作者: 月半女那 | 来源:发表于2019-07-03 17:46 被阅读0次

三.操作符基础

在RxJs中‘操作符’其实是operator,他并不是一个字符,而是函数。

  1. 静态操作符和实例操作符
  • 静态操作符:不需要Observable实例就可以执行的函数。可以直接调用例如Observable.of......
  • 实例操作符:需要提前创建好一个Observable对象,是添加在observable.prototype属性上的函数
    所有的操作符都是函数,无论是静态操作符还是是实例操作符,都会返回一个Observable对象,不同点是,在链式调用中,静态操作符只能出现在首位,而实例操作符可以出现在任何位置。
  1. 操作符分类
  • 创建类(creation)
  • 转化类(transformation)
  • 过滤类(filtering)
  • 合并类(combination)
  • 多播类(multicating)
  • 错误处理类(err Handling)
  • 辅助工具类(utiliy)
  • 条件分支类(conditional&boolean)
  • 数学和合计类(mathmatical & aggregate)
    创建类一定是数据流的源头,他是没有上游的
  1. 如何实现操作符
  • 返回一个全新的Observable对象
  • 对上游和下游的订阅以及退订处理
  • 处理异常情况
  • 及时释放资源
    可以使用bind绑定特定的Observable对象
    有时候不希望一个操作符影响所有的Observable对象,所以使用bind,也可以使用call区别就是call是立即执行,而bind是创建一个新函数,也可以使用绑定操作符::,这样解决了无法链式调用的问题
const result = source$::map(x => x*2)::map(x => x-1)
  1. pipeable/letable
    pipeable: 值 |> 函数
    pipeable操作符使用方法:
666 |> foo |> bar
=> bar(foo(666))

四.创建数据流

在RxJs中一切都以数据流为中心,在代码中,数据流以Observable类的实例对象形式存在,创建Observable对象就是创建数据流处理的开始

  1. 创建类操作符往往不会从其他Observable对象获取数据,在数据管道中,创建类操作符就是数据流的源头。所以创建类操作符大部分是静态操作符。
功能需求 使用的操作符
直接操作观察者 create
根据有限的数据产生同步数据 of
产生一个数值范围内的数据 range
以循环方式产生数据 generate
重复产生数据流中的数据 repeat/repeatWhen
产生空数据流 empty
产生直接出错是数据 throw
产生用不完结的数据 never
间隔给定时间持续产生数据 interval/timer
从数组等枚举类型数据产生数据流 from
从promise对象产生数据流 fromPromise
从外部事件对象产生数据流 fromEvent / fromEventPattern
从AJAX产生数据流 ajax
延迟产生数据流 defer
  • create
Observable.create = function(subscribe){
    return  new Observable(subscribe)
}

创建同步数据的Observable对象

  • of
    可以轻松创建指定数据集合的Observable对象
import { of } from 'rxjs';
of(10, 20, 30)
.subscribe(
 console.log,
 null,
 ()=> {
     console.log('complete')
 }
);
// 10
// 20
// 30
complete

在数据被subscribe时,吐出数据的过程时同步的,没有任何时间间隔,在数据产生完毕之后,对应的Observable对象也就完结了。
of 产生的是Cold Observable对于每一个Observer都会重复吐出同样的一组数据所以可以反复使用

  • range
    使用场景:需要产生很大连续数字序列
range(start: number = 0, count?: number, scheduler?: SchedulerLike): 
Observable<number>
import {range} from 'rxjs'

range(1,40).subscribe(
     console.log,
     null,
     ()=> {
         console.log('complete')
     })
// 1
// 2
// 3
// .
// .
// .
// 39
// 40
// complete
  • generate循环创建
    generate类似于一个for循环,可以创建出自己想要的数字或者字符串序列
generate<T, S>(
initialStateOrOptions: S | GenerateOptions<T, S>,  
condition?: ConditionFunc<S>, 
iterate?: IterateFunc<S>, 
resultSelectorOrObservable?: (ResultFunc<S, T>) | SchedulerLike, 
scheduler?: SchedulerLike): Observable<T>

// initialStateOrOptions:初始值
// condition:条件
// iterate: 每次递增值的变化,是个函数
// resultSelectorOrObservable: 产生结果
import {generate} from 'rxjs'
generate(1,x=> x <10, x=> x+2, x=> x+'haha').subscribe(
         console.log,
     null,
     ()=> {
         console.log('complete')
     })

// 1haha
// 3haha
// 5haha
// 7haha
// 9haha
// complete

相关文章

  • 第1章 函数响应式编程

    注: 学习程墨老师《深入浅出RxJS》的笔记 RxJS采用了函数响应式编程。RxJS世界中有一种特殊的对象,称为流...

  • 第2章 RxJS入门

    注: 学习程墨老师《深入浅出RxJS》的笔记 。 1、Observable和Observer Observable...

  • 创建数据流

    注: 学习程墨老师《深入浅出RxJS》的笔记在RxJS中,一切都以数据流为中心,数据流以Observable类的实...

  • 深入浅出Rxjs笔记 二

    三.操作符基础 在RxJs中‘操作符’其实是operator,他并不是一个字符,而是函数。 静态操作符和实例操作符...

  • 第3章 操作符基础

    注: 学习程墨老师《深入浅出RxJS》的笔记任何一种 Reactive Extension 的实现,都包含一个操作...

  • Rx.js学习笔记(一)——创建数据流

    前言 这些笔记大部分都是阅读《深入浅出RxJS》一书的笔记。这是我第二次看了,第一次知识粗略的翻过,回想起来没有什...

  • 深入浅出Rxjs笔记 三

    四.创建数据流 repeat:重复数据的数据流实例操作符repeat功能:可以重复上游Observable中的数据...

  • 深入浅出Rxjs笔记 四

    合并数据流 将多个数据流中的数据会和到一个数据流中,途中只展示了两个上游数据流 1.concat:首尾相连 因为c...

  • 深入浅出Rxjs笔记 一

    一.函数式编程 函数式编程要求: 声明式 纯函数 数据不可变js 不算纯粹意义上的函数式编程语言,但是,在js中函...

  • RxJS官方教程(六) 算子

    RxJS官方教程(一) 概览 RxJS官方教程(二) Observable RxJS官方教程(三) Observa...

网友评论

    本文标题:深入浅出Rxjs笔记 二

    本文链接:https://www.haomeiwen.com/subject/qnhqhctx.html