初识Observable

  • Observable<T> 这个类就是Rx框架的基础, 我们可以称他为可观察序列, 他的作用就是可以异步的产生一系列的Event(事件), 即一个Observable<T>对象会随着时间的推移不定期的发出event(element: T)这样一个东西
  • 这些Event还可以鞋带数据, 它的泛型<T>就是用来指定这个Event携带的数据的类型
  • 有了Observable<T>(可观察序列), 我们还需要一个Observer(订阅者)来订阅它, 这样这个订阅者才能收到Observable<T>不时发出的Event

关于Event

Observable可以发出3种不同类型的Event事件

  • next: 可以携带数据<T>的事件, 可以说是他是一个"最正常"的事件
  • error: 表示一个错误, 他可以携带具体的错误内容, 一旦Observable发出了error event, 则这个Observable就等于终止了, 以后再也不会发出event事件了
  • complete: 表示Observable发出的事件正常的结束了, 跟error一样, 一旦OBservable发出了complete event, 则这个Observable就等于终止了, 以后再也不会发出event事件了

创建OBservable

of()方法

  • 该方法可以接受可变数量的参数(必须是同类型的)
let observable = Observable.of("A", "B", "c")

from()方法

  • 该方法需要一个数组参数
let observable = Observable.from(["A", "B", "C"])

初识Subjects

Subjects既是Observer, 也是Observable

  • 说他是Observer, 是因为它能够动态的接受新的值
  • 说他又是一个Observable, 是因为当Subjects有了新的值之后, 就会通过Event将新值发出给他的所有订阅者
  • 一共有4种Subjects, 分别为: PublishSubject, BehaviorSubject, ReplySubject, Variable
  • 他们之间最大的区别只是在于, 当一个新的订阅者刚订阅他的时候, 能不能收到Subject以前发出过的旧的Event, 如果能的话又能收到多少个

PublishSubject

  • PublishSubject是最普通的Subject, 它不需要初始值就能创建
  • PublishSubject的订阅者从他们开始订阅的时间点起, 可以收到订阅后Subject发出的新Event, 而不会收到他们在订阅前已发出的Event

BehaviorSubject

  • BehaviorSubject需要通过一个默认初始值来创建
  • 当一个订阅者来订阅他的时候, 这个订阅者会立即收到BehaviorSubject上一个发出的event, 之后就跟正常的情况一样, 他也会接收到BehaviorSubject之后发出的新的event

ReplaySubject

  • ReplaySubject在创建时候需要设置一个bufferSize, 表示它对于它发送过的event的缓存的个数
  • 比如一个BehaviorSubjectbufferSize设置为2, 他发出了3个.nextevent, 那么他会将后两个(最近的两个)event给缓存起来, 此时如果有一个subscriber订阅了这个ReplaySubject,那么这个subscriber就会立即收到前面缓存的两个.nextevent外, 还会收到那个终结的.error或者.completeevent

Variable(将要被弃用))

  • Variable其实就是对BehaviorSubject的封装, 所以他也必须要通过一个默认的初始值进行创建
  • Variable具有BehaviorSubject的功能, 能够向他的订阅者发出上一个event以及之后新创建的event
  • 不同的是, Variable还会把之前发出的值保存为自己的状态, 同事他会在销毁时自动发送.completeevent, 不需要也不能手动给Variable发送complete或者error事件来结束他
  • 简单地说就是Variable有个一value属性, 我们改变这个value属性的值就相当于调用一般SubjectsonNext()方法, 而这个最新的onNext()的值就被保存在value属性里了, 知道我们再次修改他

注意:

Variable本身没有subscribe()方法, 但是所有Subjects都有一个asObservable()方法, 我们可以使用这个方法返回这个VariableObservable类型, 拿到这个Observable类型我们就能订阅他了

Variable绝对不会发生error事件, 强制调用onError()会导致编译错误

Variable赋值, 会自动触发onNext()事件, 然后自动执行onComplete()事件. 强制绑定onComplete()事件也会导致编译错误

最新文章

  1. win10使用技巧之如何打出偏僻字母
  2. [1008]harder_prime
  3. hiho #1310 : 岛屿 (dfs,hash)
  4. zepto源码--核心方法8(管理包装集)--学习笔记
  5. 移动金融APP分析
  6. jquery自动将form表单封装成json的具体实现
  7. 第六十七篇、OC_UITableView head下拉图片放大的效果
  8. linux 判断指定用户对指定目录具有的权限
  9. 【html】【6】div浮动float
  10. BZOJ 1296: [SCOI2009]粉刷匠( dp )
  11. FastReport的再次使用
  12. 用node.js实现ORM的一种思路
  13. JAVA中的按值传递
  14. Android 开发工具类 19_NetworkStateReceiver
  15. PRESTO安装部署和参数说明(一)
  16. 2018-2019-1 20189203 《Linux内核原理与分析》第七周作业
  17. 简介浏览器内核与JavaScript引擎
  18. java字符串集合
  19. Where To Buy -- proposed by Renqian Luo
  20. java共享锁实现原理及CountDownLatch解析

热门文章

  1. flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31
  2. PAT 乙级 1076.Wifi密码
  3. 移动端 1px 像素边框问题的解决方案(Border.css)
  4. Linux四剑客之awk命令
  5. 动态创建form 完成form 提交
  6. isa objc_msgSend
  7. vue.js双向绑定之--select获取text
  8. Codeforces Round #603 (Div. 2) B. PIN Codes
  9. git 提交代码报错failed to push some refs to 解决笔记
  10. 原生js如何判断元素出现在可视区