RxJS 是一個(gè)函數(shù)式編程的庫榔至,它通過使用 observable 序列來編寫異步和基于事件的程序。
它提供了一個(gè)核心類型 Observable拭宁,附屬類型 (Observer洛退、 Schedulers、 Subjects) 和受 [Array#extras] 啟發(fā)的操作符 (map杰标、filter兵怯、reduce、every, 等等)腔剂,這些數(shù)組操作符可以把異步事件作為集合來處理媒区。
可以把 RxJS 當(dāng)做是用來處理事件的 Lodash 。
一. 特性
1.純凈性:
使用純函數(shù)掸犬,將應(yīng)用的狀態(tài)單獨(dú)隔離出來袜漩;
2.流動(dòng)性:
延時(shí),過濾等流程控制符湾碎,可輕松實(shí)現(xiàn)函數(shù)防抖和節(jié)流功能宙攻。
3.作為函數(shù)的泛化,解決了promise的幾個(gè)不足
(1)promise在 new實(shí)例化時(shí)傳入的fn是立即執(zhí)行的介褥,而且無法中斷座掘;
而RXjs中Observables是延遲執(zhí)行递惋,不“調(diào)用”它(使用 subscribe)是不會(huì)執(zhí)行的。
訂閱Observable類似調(diào)用函數(shù)
(2)promise的then回調(diào)是異步的溢陪;RXjs是同步的萍虽,像函數(shù)一樣;
二. Observable和函數(shù)的區(qū)別
1.函數(shù)只能返回一個(gè)值
function foo() {
console.log('Hello');
return 42;
return 100; // 死代碼形真,永遠(yuǎn)不會(huì)執(zhí)行
}
2.Observables可以返回多個(gè)值
var foo = Rx.Observable.create(function (observer) {
console.log('Hello');
observer.next(42);
observer.next(100); // “返回”另外一個(gè)值
observer.next(200); // 還可以再“返回”值
});
console.log('before');
foo.subscribe(function (x) { console.log(x);
});
console.log('after');
同步輸出:
"before"
"Hello"
42
100
200
"after"
3.總結(jié):
func.call() 意思是 "同步地給我一個(gè)值"
observable.subscribe() 意思是 "給我任意數(shù)量的值杉编,無論是同步還是異步"
以上,函數(shù)式編程庫RxJS簡(jiǎn)單介紹