[ECMAScript] Observable

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经过filtermap,返回了一个新的observable2对象,
subscribe操作是由新的observable2对象调用的。

(2)observable对象只有在调用subscribe之后,才触发observer
在本例中,调用subscribe之后,setInterval才开始执行。

(3)subscribe接受一个对象作为参数,
该对象包含三个回调,nexterrorcomplete
它们分别由observer.nextobserver.errorobserver.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

你可能感兴趣的:([ECMAScript] Observable)