Rxjs笔记

2 篇文章 0 订阅

1. RxJs是什么?

可以看一下官网介绍 Rx官网

Rx是一个API,通过可观察的流用于异步编程,使得异步编程可以控制




2. Rxjs核心概念

在RxJS中管理异步事件的基本概念如下:

Observable:代表了一个调用未来值或事件的集合的概念
Observer:代表了一个知道如何监听Observable传递过来的值的回调集合
Subscription:代表了一个可执行的Observable,主要是用于取消执行
Operators:是一个纯函数,允许处理集合与函数式编程风格的操作,比如map、filter、concat、flatMap等
Subject:相当于一个EventEmitter,它的唯一的方法是广播一个值或事件给多个Observer
Schedulers:是一个集中式调度程序来控制并发性,允许我们在setTimeout或者requestAnimationFrame上进行协调计算


3. Rxjs中的Observable

点击打开链接

和 普通函数 对比 学习Observable

普通函数:

  // 定义一个函数
  fun() {
    console.log('process...');
  }
  // 调用这个函数
  fun();

Observable

    // 创建一个Observable函数(一个流),带有返回值
    const test$ = Observable.create((subscriber) => {
      console.log('process...');
      subscriber.next('1234');
    });

    // 执行Observable函数,然后控制台输出返回值
    test$.subscribe((value) => {
      console.log(value);
    });

输出:

process...

1234

    // 创建一个Observable函数(一个流),带有返回值
    const test$ = Observable.create((subscriber) => {
      console.log('process...');
      subscriber.next('1234');
      setTimeout(() => {
        subscriber.next('5678');
      }, 1000);
    });

    // 执行Observable函数,然后控制台输出返回值
    test$.subscribe((value) => {
      console.log(value);
    });

输出:

process...

1234

5678

说明:

一次订阅,输出所有值,输出多个值

Observable可以选择异步输出值


处理异常:

普通函数:


test02() {
console. log( 'process...');
throw new Error( 'bug!');
}

try {
this. test02();
}catch (e) {
console. log(' error' + e);
}


observable函数:

test() {
// 创建一个Observable函数(一个流),带有返回值
const test$ = Observable. create(( subscriber) => {
console. log( 'process...');
subscriber. next( '1234');
subscriber. error( new Error( 'bug!'));
});

// 执行Observable函数,然后控制台输出返回值
test$. subscribe(
value => { console. log(value); },
e => console. log(e)
);
}


RxJS使用流程:

1. 创建观察者:(送报纸的)

let foo = Observable.create((observer) => {

    console.log('一些列操作');

    observer.next('2. 相当于return出去的值');

    observer.next('3. 可以return出去多个值');

    observer.error(new Error('4. 异常处理,bug!'));

})

5. 订阅observable,返回订阅对象(报纸的读者、订阅者)

let subscription = foo.subscribe(

 value => console.log(value),

 error => console.log('error' + e) 

)

还有一种形式

let subscription = foo.subscribe({
  next(value) { console.log(value) },
  error(e) { console.log('error: ' + e) }

})


中止执行:(这是必须的,避免出现内存泄漏等bug)

var subscription = foo.subscribe(i => console.log(i));

subscription.unsubscribe();


Observable执行结束后,会触发观察者的complete回调

foo.subscribe({
  next(value) { console.log(value) },
  complete() { console.log('completed') }

})

Observable的观察者共有三种回调

next:获得数据

error:处理异常

complete:执行结束

next可以被调用多次,error和complete每个最多被调用一次,并且其中一个被调用了,不再触发其他回调


数据转换

对于函数的返回值,有时我们需要处理一下再使用,Observable先map再subscribe

var foo = Rx.Observable.create((observer) => {
  let i = 0
  setInterval(() => observer.next(i++), 1000)
})
 
foo.map(i => i * 2).subscribe(i => console.log(i))
// 输出:
// 0
// 2
// 4

// ...


除了 map() 方法,Observable 还提供了多种转换方法,如 filter() 用于过滤数据,find() 值返回第一个满足条件的数据,reduce() 对数据进行累积处理,在执行结束后返回最终的数据。这些方法和数组方法功能是类似的,只不过是对异步返回的数据进行处理。还有一些转换方法更加强大,例如可以 debounceTime() 可以在时间维度上对数据进行拦截等等。


Observable 的转换方法,本质不过是创建了一个新的 Observable,新的 Observable 基于一定的逻辑对原 Observable 的返回值进行转换处理,然后再推送给观察者。

Observable是一个特殊的函数,每次调用都会重新执行逻辑,执行有返回数据等;

数据推送的方式返回给回调方法,返回值可以是异步的,可以返回多个值等

将Observable视为特殊的函数,在理解上是有所帮助的。

Observable也被视为data stream 数据流,这是从Observable可以返回多个值的角度上来看的,

而数据转换则是基于当前数据流创建新的数据流:Observable.map(x => 10*x)


从图上看到的只是数据,而将Observable看做是函数时,会注意到起内部逻辑,也能理解数据时怎么产生的



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书的内容 本书以线性⽅式来介绍RxJS,所以建议读者以顺序的⽅式来阅读本 书,如果读者觉得对某⼀个⽅⾯已经⼗分了解,也可以跳过相关章节,不 过,还是希望读者在时间允许的情况下阅读全部内容,你肯定会有新的体 会。本书包含15章,章节的内容如下分布。 第1章 函数响应式编程。这⼀章⽤⼀些例⼦展⽰RxJS体现的编程风 格,引出两个重要的概念:函数式编程和响应式编程,使⽤RxJS的开发者 必须先理解这两种风格。 第2章 RxJS⼊门。这⼀章介绍软件项⽬中导⼊RxJS的⽅法,RxJS中 的基本概念,包括数据流、操作符和观察者模式。 第3章 操作符基础。使⽤RxJS很⼤程度上就是在使⽤操作符,这⼀ 章会介绍RxJS中操作符的实现原理。 第4章 创建数据流。这⼀章介绍RxJS中创建数据流的不同⽅法,包 括RxJS提供的主要创建类操作符的使⽤⽅法。 第5章 合并数据流。这⼀章介绍如何合并多个数据流,包括合并类操 作符的使⽤⽅法详解。 第6章 辅助类操作符。这⼀章介绍不是很起眼却很重要的两类操作 符,数学类和布尔条件类操作符。 第7章 过滤数据流。这⼀章介绍如何让流过数据管道的数据根据规则 筛选掉⼀部分,在这⼀章还会介绍⽤筛选法进⾏回压控制的⽅法。 第8章 转化数据流。这⼀章介绍对流经数据管道的数据进⾏格式转化 的⽅法,包括RxJS提供的各种转化类操作符的⽤法。 第9章 异常错误处理。这⼀章介绍数据流中产⽣的异常的处理⽅法, 包括如何捕获异常和实现重试。 第10章 多播。这⼀章介绍如何让⼀个数据源的内容被多个观察者接 收,包括Subject的使⽤⽅法和RxJS对各种多播场景的⽀持。 第11章 掌握时间的Scheduler。这⼀章介绍RxJS中Scheduler的概念。 第12章 RxJS的调试和测试。介绍RxJS应⽤的调试和单元测试⽅法, 深⼊介绍如何利⽤RxJS写出⾼可测试性的代码。 第13章 ⽤RxJS驱动React。这⼀章介绍RxJS和React结合的⽅法。 第14章 Redux和RxJS结合。这⼀章介绍Redux和RxJS的组合⽅式,包 括如何⽤RxJS实现Redux的功能,如何⽤Redux-Observable来发挥两者的共 同的优势。 第15章 RxJS游戏开发。这⼀章介绍⽤RxJS实现⼀款游戏breakout的 完整过程,综合了全书介绍的所有RxJS知识点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值