RxJS 系列教程-什么是 RxJS?
RxJS 可以解决的问题
- 我们知道传统的 for,while 对循环体中的异步程序是无法感知的,或者说,它们不会等待异步程序执行完毕再进入下一轮循环。
- 错误处理是任何程序都要解决的问题,本身就已很复杂的回调函数中再嵌入 try/catch 块吗?如果还想加入重试机制呢?
- 商业逻辑内嵌在回调函数中,可读性差,复杂度高。现如今流行的组件化编程,即可重用,又可解耦,还方便测试;
- 闭包是强大的,过度地使用闭包将导致我们不得不谨慎地审视变量的作用域以及其值。再加上共享变量带来的副作用,混杂在 if/else 条件语句和 for 循环中,每天都会有修不完的 bug;
- 根据事件或耗时操作无响应的时间进行取消操作;
- 自己实现 throttling 和 debouncing 是很困难的(二者区别见http://www.jianshu.com/p/e91775195608)
- 众所周知的事件监听带来的内存泄露问题;
RxJS 可以优雅地替代 callback,或者基于 promises 的任何第三方库,使我们可以使用一个编程模型来对待任何数据源(除了远程 http 请求,Node.js 中的 Event
Emitter 也使用的是回调机制)。也就是说,我们可以用 RxJS 来处理读取文件,http 请求,鼠标点击,鼠标移动这些事件。
数据的流动和传播
事件必然伴随着数据的产生,在响应式编程的世界中,我们把任何可以被使用的数据源统称为流(Stream)。我们再来看一下什么是响应式编程模型:
1 | var x = 1; |