摘要:原文提供的操作符非常有用,盡管是基礎(chǔ)對(duì)象。我們稱這種現(xiàn)象為操作符訂閱鏈。靜態(tài)操作符是依賴于類的一組純函數(shù),通常被用來(lái)從頭創(chuàng)建流。最常見的靜態(tài)操作符類型是所謂的創(chuàng)建操作符。貫穿本站的文檔,我們會(huì)廣泛的使用珠寶圖去解釋操作符是如何生效的。
Operators原文:http://reactivex.io/rxjs/manu...
RxJS提供的操作符非常有用,盡管Observable是基礎(chǔ)對(duì)象。
操作符是聲明式編程中將復(fù)雜的異步代碼轉(zhuǎn)變?yōu)楹?jiǎn)單的代碼組合的重要措施。
操作符是Observable類型的一組方法,比如像:.map(...),.filter(...),.merge(...),等等。當(dāng)方法被調(diào)用的時(shí)候,他們不會(huì)更改已經(jīng)存在的Observable流實(shí)例,而是返回一個(gè)新的Observable流的實(shí)例,這個(gè)新的對(duì)象中的訂閱邏輯則是建立在第一個(gè)Observable流之上的。
一個(gè)Operator能夠在當(dāng)前的Observable流基礎(chǔ)上創(chuàng)建一個(gè)新的Observable流。這是一個(gè)純粹的新處理過(guò)程:之前的Observable保持不變。
操作符本質(zhì)上是能夠接收一個(gè)Observable流作為輸入,并返回一個(gè)Observable流作為輸出的純函數(shù)。
訂閱輸出的Observable流也會(huì)同時(shí)訂閱輸入的Observable流。
在下面的例子中,我們創(chuàng)建了一個(gè)自定義的操作符函數(shù)可以將所有輸入的值都乘以10,然后輸出:
function multiplyByTen(input) { var output = Rx.Observable.create(function subscribe(observer) { input.subscribe({ next: (v) => observer.next(10 * v), error: (err) => observer.error(err), complete: () => observer.complete() }); }); return output; } var input = Rx.Observable.from([1, 2, 3, 4]); var output = multiplyByTen(input); output.subscribe(x => console.log(x));
輸出為:
10 20 30 40
注意以上的例子中,訂閱輸出流也會(huì)同時(shí)訂閱輸入流的情況。我們稱這種現(xiàn)象為:“操作符訂閱鏈”。
實(shí)例操作符 vs 靜態(tài)操作符什么是實(shí)例操作符? 通常提及操作符,我們假定指的都是實(shí)例操作符,他們是Observable流的實(shí)例方法。
例如,如果multiplyByTen是正式的實(shí)例操作符,他將會(huì)是這樣的:
Rx.Observable.prototype.multiplyByTen = function multiplyByTen() { var input = this; return Rx.Observable.create(function subscribe(observer) { input.subscribe({ next: (v) => observer.next(10 * v), error: (err) => observer.error(err), complete: () => observer.complete() }); }); }
實(shí)例操作符本質(zhì)是一個(gè)函數(shù),他在內(nèi)部使用this關(guān)鍵字指代Observable輸入流。
注意輸入Observable流已經(jīng)不再作為函數(shù)的參數(shù),它被假定為this所指向的對(duì)象。下面是我們?nèi)绾问褂脤?shí)例操作符:
var observable = Rx.Observable.from([1, 2, 3, 4]).multiplyByTen(); observable.subscribe(x => console.log(x));
什么是靜態(tài)操作符? 有別于實(shí)例操作符,靜態(tài)操作符直接是Observable類的方法。靜態(tài)操作符函數(shù)內(nèi)部不再使用this,它完全依賴函數(shù)的參數(shù)。
靜態(tài)操作符是依賴于Observable類的一組純函數(shù),通常被用來(lái)從頭創(chuàng)建Observable流。
最常見的靜態(tài)操作符類型是所謂的創(chuàng)建操作符。不同于將輸入流轉(zhuǎn)換成輸出流的操作符,他們不用接收Observable類型的參數(shù),而是接收諸如number類型的參數(shù),就可以創(chuàng)建一道數(shù)據(jù)流。
一個(gè)經(jīng)典的例子是使用靜態(tài)操作符interval()。他接收一個(gè)數(shù)字(而不是Observable流)作為輸入?yún)?shù),之后產(chǎn)生一道Observable流作為輸出:
var observable = Rx.Observable.interval(1000 /* number of milliseconds */);
另一個(gè)創(chuàng)建操作符的例子是create(),在之前的例子里已經(jīng)用了很多次。你可以從這里查看所有的創(chuàng)建操作符。
然而,靜態(tài)操作符們并不僅限于簡(jiǎn)單創(chuàng)建。一些組合操作符也是靜態(tài)的,例如merage,combineLates,concat等等。他們可以整合多道輸入的Observable流,所以也是非常有意義的靜態(tài)操作符。
var observable1 = Rx.Observable.interval(1000); var observable2 = Rx.Observable.interval(400); var merged = Rx.Observable.merge(observable1, observable2);珠寶圖 Marble diagrams
為了更好的展示操作符是如何工作的,只有文字性的解釋是不夠的。很多操作符依賴于時(shí)間,例如他們可能會(huì)使用延遲,取樣,節(jié)流,又或者去抖等等方式。
畫一些圖表能很好的說(shuō)明這些過(guò)程。珠寶圖就是用來(lái)展示這些的圖表,他包含輸入Observable流,操作符和相關(guān)參數(shù),還有輸出流。
在珠寶圖中,時(shí)間的流逝被標(biāo)為從左到右的水平線,線上的每個(gè)值(“珠寶”)代表了Observable流在執(zhí)行過(guò)程中發(fā)出的值。
下圖你可以看到對(duì)珠寶的詳解。
貫穿本站的文檔,我們會(huì)廣泛的使用珠寶圖去解釋操作符是如何生效的。在別的場(chǎng)景下他們或許同樣有用,例如在whiteboard上或者在單元測(cè)試中(作為ASCII圖表)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83624.html
摘要:原文各種各樣的操作符按照不同的目的,分類幾個(gè)大類創(chuàng)建,變化,過(guò)濾,組合,廣播,錯(cuò)誤處理,使用工具等等。 原文:http://reactivex.io/rxjs/manu... 各種各樣的操作符按照不同的目的,分類幾個(gè)大類:創(chuàng)建,變化,過(guò)濾,組合,廣播(multicasting),錯(cuò)誤處理,使用工具等等。 以下的列表,按照分類羅列了全部的操作符: 創(chuàng)建操作符 Creation Opera...
摘要:原文是一個(gè)使用可觀察量隊(duì)列解決異步編程和基于事件編程的庫(kù)。提供了幾個(gè)管理異步事件的核心概念可觀察量,代表了一個(gè)由未來(lái)獲取到的值或事件組成的集合。相當(dāng)于事件觸發(fā)器,是向多個(gè)廣播事件或推送值的唯一方法。 原文:http://reactivex.io/rxjs/manu... RxJS 是一個(gè)使用可觀察量(observable)隊(duì)列解決異步編程和基于事件編程的js庫(kù)。他提供了一個(gè)核心的類型O...
摘要:有哪些新變化于年月日正式發(fā)布,為開發(fā)人員帶來(lái)了一些令人興奮的增補(bǔ)和改進(jìn)。不要移除包,直到你將所有的鏈?zhǔn)讲僮餍薷臑楣艿啦僮鞣? RxJS 6有哪些新變化? RxJs 6于2018年4月24日正式發(fā)布,為開發(fā)人員帶來(lái)了一些令人興奮的增補(bǔ)和改進(jìn)。Ben Lesh, rxJS核心開發(fā)成員,強(qiáng)調(diào): RxJS 6在擁有更小API的同時(shí),帶來(lái)了更整潔的引入方式 提供一個(gè)npm包,該package可...
摘要:到底是什么先上代碼輸出這里可以把想象成一個(gè)函數(shù),這意味著你每次調(diào)用都會(huì)導(dǎo)致傳入里的回調(diào)函數(shù)重新執(zhí)行一次調(diào)用的方式為相當(dāng)于。接收函數(shù)返回值的方式也從改為通過(guò)傳入回調(diào)函數(shù)的方式獲取。具體看代碼運(yùn)行結(jié)果如上的第一個(gè)回調(diào)函數(shù)里的結(jié)構(gòu)是推薦的結(jié)構(gòu)。 通俗的方式理解Rx.js 序言 今早看民工叔的文章的時(shí)候, 發(fā)現(xiàn)對(duì)Rxjs所知甚少, 于是去官方看了下教程, 整理出一些東西, 寫成此文。Rxjs據(jù)...
摘要:原文什么是觀察者是流推送數(shù)據(jù)的用戶。觀察者們就是一組函數(shù)的集合,監(jiān)聽著每一個(gè)流推送出的不同類型的通知,包括和。如果沒(méi)有為某個(gè)類型的通知提供,流的執(zhí)行過(guò)程仍然會(huì)照常進(jìn)行,但是響應(yīng)的通知將會(huì)被忽略,因?yàn)橛^察者沒(méi)有提供相應(yīng)的來(lái)接收。 原文: http://reactivex.io/rxjs/manu... 什么是Observer? 觀察者(Observer)是Observable流推送數(shù)據(jù)的...
閱讀 3658·2021-11-25 09:43
閱讀 652·2021-09-22 15:59
閱讀 1755·2021-09-06 15:00
閱讀 1778·2021-09-02 09:54
閱讀 697·2019-08-30 15:56
閱讀 1189·2019-08-29 17:14
閱讀 1849·2019-08-29 13:15
閱讀 889·2019-08-28 18:28