成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[譯]RxJS文檔07——Operators 操作符

cooxer / 3540人閱讀

摘要:原文提供的操作符非常有用,盡管是基礎(chǔ)對(duì)象。我們稱這種現(xiàn)象為操作符訂閱鏈。靜態(tài)操作符是依賴于類的一組純函數(shù),通常被用來(lái)從頭創(chuàng)建流。最常見的靜態(tài)操作符類型是所謂的創(chuàng)建操作符。貫穿本站的文檔,我們會(huì)廣泛的使用珠寶圖去解釋操作符是如何生效的。

原文:http://reactivex.io/rxjs/manu...

Operators

RxJS提供的操作符非常有用,盡管Observable是基礎(chǔ)對(duì)象。
操作符是聲明式編程中將復(fù)雜的異步代碼轉(zhuǎn)變?yōu)楹?jiǎn)單的代碼組合的重要措施。

什么是操作符 (operator)?

操作符是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

相關(guān)文章

  • []RxJS文檔08——作符分類

    摘要:原文各種各樣的操作符按照不同的目的,分類幾個(gè)大類創(chuàng)建,變化,過(guò)濾,組合,廣播,錯(cuò)誤處理,使用工具等等。 原文:http://reactivex.io/rxjs/manu... 各種各樣的操作符按照不同的目的,分類幾個(gè)大類:創(chuàng)建,變化,過(guò)濾,組合,廣播(multicasting),錯(cuò)誤處理,使用工具等等。 以下的列表,按照分類羅列了全部的操作符: 創(chuàng)建操作符 Creation Opera...

    phoenixsky 評(píng)論0 收藏0
  • []RxJS文檔01——介紹

    摘要:原文是一個(gè)使用可觀察量隊(duì)列解決異步編程和基于事件編程的庫(kù)。提供了幾個(gè)管理異步事件的核心概念可觀察量,代表了一個(gè)由未來(lái)獲取到的值或事件組成的集合。相當(dāng)于事件觸發(fā)器,是向多個(gè)廣播事件或推送值的唯一方法。 原文:http://reactivex.io/rxjs/manu... RxJS 是一個(gè)使用可觀察量(observable)隊(duì)列解決異步編程和基于事件編程的js庫(kù)。他提供了一個(gè)核心的類型O...

    BlackHole1 評(píng)論0 收藏0
  • RxJS 6有哪些新變化?

    摘要:有哪些新變化于年月日正式發(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可...

    LeanCloud 評(píng)論0 收藏0
  • 通俗的方式理解RxJS

    摘要:到底是什么先上代碼輸出這里可以把想象成一個(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ù)...

    jzzlee 評(píng)論0 收藏0
  • []RxJS文檔04——Observer 觀察者

    摘要:原文什么是觀察者是流推送數(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ù)的...

    xiaolinbang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<