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