Wrappres' Studio.

构建底层的发布和订阅事件总线

字数统计: 405阅读时长: 1 min
2020/02/16 Share

构建底层的发布和订阅事件总线

事件总线

是对发布和订阅设计模式的一种实现,通过发布,订阅可以将组件间一对一和一对多的耦合关系解开。

一对一:delegate和block,两者只适合做一对一数据传递,局限性较大

一对多:KVO和NSNotificationCenter,两者过于灵活而无法管控和维护

Promise

一种专门针对异步数据操作编写的一套统一规则的漠视。本质是通过Promise对象保存异步数据操作,同时Promise对象提供统一的异步数据操作事件处理的接口。

Promise对象的三种状态

  • pending 表示Promise对象当前正在等待异步事件处理中
  • fulfilled 表示Promise对象当前处理的异步事件已经成功完成
  • rejected 表示Promise对象当前处理的异步事件没有成功

Promise对象的方法

then 和 catch,执行完后回返回先前的Promise对象,同时根据异步操作结果改变Promise对象的状态。

img

then方法就是事件总线中的发布操作,then方法执行完返回Promise对象能够继续同步执行多个then方法,由此实现了一个发布操作对应多个订阅事件。

PromiseKit

1
2
3
4
5
6
7
8
9
10
11
12
firstly {
// 异步获取当前用户信息
fetchUserInfo()
}.then { userInfo in
// 使用异步获取到的用户信息中的 uid 再去异步获取用户的 timeline
fetchUserTimeline(uid: userInfo.uid)
}.then { timeline in
// 记录 timeline
self.timeline = timeline
}.catch {
// 整个方法链的错误都会在这处理
}
CATALOG
  1. 1. 构建底层的发布和订阅事件总线
    1. 1.1. 事件总线
    2. 1.2. Promise
    3. 1.3. PromiseKit