1. 背景
observable目前处于TC39 Stage 1阶段,它提出了Observable
类型。
在响应式编程库RxJS中,Observable
起着关键作用。
除了RxJS之外,还有一个node版本的实现:zen-observable。
下面我们安装zen-observable,试验一下Observable
的一些特性。
2. 安装
npm init
npm install --save zen-observable
3. 例子
const Observable = require("zen-observable");
const observable1 = new Observable(observer => {
let i = 0;
const timer = setInterval(() => {
if (i > 10) {
clearInterval(timer);
observer.complete();
return;
}
observer.next(i++);
}, 0.1 * 1000);
});
const observable2 = observable1
.filter(v => v % 2 == 0)
.map(v => v * 10)
observable2.subscribe({
next: v => console.log(`next: ${v}`),
error: e => console.log(`error: ${e}`),
complete: () => console.log(`complete`)
});
(1)observable1
经过filter
和map
,返回了一个新的observable2
对象,
subscribe
操作是由新的observable2
对象调用的。
(2)observable对象只有在调用subscribe
之后,才触发observer
,
在本例中,调用subscribe
之后,setInterval
才开始执行。
(3)subscribe
接受一个对象作为参数,
该对象包含三个回调,next
,error
,complete
,
它们分别由observer.next
,observer.error
,observer.complete
触发。
(4)observable对象中的异常,并不会触发subscribe
中的error
回调。
(5)最终结果,
next: 0
next: 20
next: 40
next: 60
next: 80
next: 100
complete
(6)本例也可以使用RxJS来实现,
安装RxJS
npm install --save rxjs
获取Observable
对象,
const { Observable } = require('rxjs/Rx');
参考
Github: tc39/proposals
Github: tc39/proposal-observable
Github: zen-observable
Github: RxJS
网友评论