文章目录
承接前文提到的异步Action话题,中间件redux-thunk易于编写和理解,但它也存在实践上的不足:
- 你最终可能会回调地狱,特别是在发出API请求时,
- 需要使用业务逻辑填充回调函数 或reducer函数去整理数据(数据格式不总是完美的,特别是使用第三方API时)
- 不利于测试(必须使用Spy方法来检查是否使用正确的对象进行dispatch)
然后现存的异步状态管理方案也有很多Saga什么的,所以……没什么所以,反正就是要讲Redux-Observable!然而又不得不先从RxJS开始:
RxJS
RxJS 是观察者模式的一个实现。它允许我们以声明方式组合 “Observables” 和 “Subjects” 的运算符来扩展观察者模式。
它被用于流式事件处理,能够更方便地梳理和管控异步逻辑。
它的核心概念,在本文中涉及Observables、Observers、Operators 和 Subjects
4个;
Observables 可观察对象; Observers 观察者; Operators 操作符; Subjects 主体(多播的Observable)
可观察对象Observable
可观察对象Observable 是可以在一段时间内 发出数据/产生事件 的对象。我们可以通过new来创建可观察对象(也可以使用一些 Operators 来创建),new时需要传一个 入参被称为subscriber的函数 来定义 “如何产生事件”。
Observable 可使用 subscriber 的.next方法 将数据推送给观察者。
如果 Observable 成功完成,它可以使用该.complete方法通知观察者。
如果 Observable 遇到错误,它可以使用该.error方法将错误推送给观察者。
观察者可以按需多次调用.next,并在最后调用.complete 或.error。在 complete 或 error 之后,Observable 对象就不会向流中推送任何值了。
观察者Observers
其实前文也可以看出,Observable 的观察者(Observer)是具有三个函数的对象:next, error 和 complete
,这些函数是可选的,它们也可以分别作为三个参数传给 Observable 对象身上的 subscribe 函数,让观察者对该 Observable 对象进行订阅。
Observer 定义了"如何响应事件",而Observable 定义了"如何产生事件";
用回调响应事件,用产生事件