RxJS
是ReactiveX
編程理念的JavaScript
版本
核心概念:
Observable
Observer
Operator
Observer是什麼
先看代碼:
let foo = Rx.Observable.create(observer => {
console.log('Hello');
observer.next(42);
});
let observer = x => console.log(x);
foo.subscribe(observer);
代碼中的第二個變量就是observer. 沒錯, observer就是當Observable"返回"值的時候接受那個值的函數!第一行中的observer其實就是通過foo.subscribe傳入的callback. 只不過稍加封裝了。 怎麼封裝的? 看代碼:
let foo = Rx.Observable.create(observer => {
try {
console.log('Hello');
observer.next(42);
observer.complete();
observer.next(10);
} catch(e) { observer.error(e) }
});
let observer = {
next(value) { console.log(value) },
complete() { console.log('completed'),
error(err) { console.error(err) }
}
foo.subscribe(observer);
你看到observer被定義成了一個對象, 其實這纔是完整的observer. 傳入一個callback到observable.subcribe相當於傳入了{ next: callback }
。
參考資料:https://zhuanlan.zhihu.com/p/25383159 ---來自民工叔叔