RxJS 笔记 01

参考 简书原文 作者:readilen
Rx 官网

概念

Reactive Programming (反应式编程) 是 RxJS 最重要的核心观念之一

RxJS 是一套藉由 Observable sequences (可观察序列) 来组合非同步行为和事件基础程序的 Library!

Functional Reactive Programming: 功能反应式编程
Functional Programming: 功能编程
Reactive Programming: 反应式编程

在面对日益複杂的问题,我们需要一个更好的解决方法。

当变数或资源发生变动时,由变数或资源自动告诉我发生变动了
1. 当发生变动 => 非同步:不知道什麽时候会发生变动,反正变动时要跟我说
2. 由变数自动告知我 => 我不用写通知我的每一步程式码

非同步常见的问题

  • 竞态条件 (Race Condition)
每当我们对同一个资源同时做多次的非同步存取时,就可能发生 Race Condition 的问题。
比如说我们发了一个 Request 更新使用者资料,
然后我们又立即发送另一个 Request 取得使用者资料,
这时第一个 Request 和第二个 Request 先后顺序就会影响到最终接收到的结果不同,
这就是 Race Condition。
  • 记忆体洩漏 (Memory Leak)
做 SPA (Single Page Application) 网站时,
我们是透过 JavaScript 来达到切换页面的内容,
这时如果有对 DOM 注册监听事件,
而没有在适当的时机点把监听的事件移除,
就有可能造成 Memory Leak。
比如说在 A 页面监听 body 的 scroll 事件,但页面切换时,
没有把 scroll 的监听事件移除。
  • 複杂的状态 (Complex State)
当有非同步行为时,应用程式的状态就会变得非常複杂!
比如说我们有一支付费用户才能播放的影片,
首先可能要先抓取这部影片的资讯,
接著我们要在播放时去验证使用者是否有权限播放,
而使用者也有可能再按下播放后又立即按了取消,
而这些都是非同步执行,
这时就会各种複杂的状态需要处理。
  • 例外处理 (Exception Handling)
JavaScript 的 try/catch 可以捕捉同步的例外,但非同步的程式就没这麽容易,尤其当我们的非同步行为很複杂时,这个问题就愈加明显。