原文链接: https://www.zhihu.com/question/40060342
一、简化异步 JavaScript 逻辑
- RxJS 把所有的异步事件都封装成 Observable。
- 因为所有的异步事件都被封装成了 Observable,所以所有的异步事件都可以用同样的 api 来订阅。
- RxJS 的 Operator 可以非常轻易地实现非常复杂的异步操作。
比如说,你要从后端获取数据,然后渲染一个表格。另外,当 WebSocket 推送事件,还有用户点击按钮时,要重新从后端获取数据。
不用 RxJS 的代码可能是这样的:
getData() .then(renderList) document.addEventListener("click", () => { getData() .then(renderList) }) socket.on(() => { getData() .then(renderList) })
用 RxJS 的代码可能是这样的:
const click$ = Rx.Observable.fromEvent(document, "click") const socket$ = Rx.Observable.webSocket("xxxxxx") const data$ = Rx.Observable .merge(socket$, click$) .startWith('init') .switchMap(getData) data$.subscribe(renderList)
二、降低并发问题的复杂性
把(已经发生或者将要发生的)某组事件(通过某种规则)转化成另一组事件,最终对其进行订阅的库。