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

資訊專欄INFORMATION COLUMN

【Rxjs】Rxjs_Subject 及其衍生類

Coly / 2832人閱讀

摘要:實(shí)例化一個(gè)對(duì)象向接受者發(fā)送一個(gè)消息流接受者訂閱消息,獲取消息流中的數(shù)據(jù)接受者訂閱消息,獲取消息流中的數(shù)據(jù)這樣兩路接受者都能拿到發(fā)送的數(shù)據(jù)流是的一個(gè)衍生類,它將數(shù)據(jù)流中的最新值推送給接受者。

Rxjs_Subject 及其衍生類

在 RxJS 中,Observable 有一些特殊的類,在消息通信中使用比較頻繁,下面主要介紹較常用的幾個(gè)類:

1/ Subject

Subject 可以實(shí)現(xiàn)一個(gè)消息向多個(gè)訂閱者推送消息。

Subject 是一種特殊類型的 Observable,它允許將值多播給多個(gè)觀察者,所以 Subject 是多播的,而普通的 Observables 是單播的(每個(gè)已訂閱的觀察者都擁有 Observable 的獨(dú)立執(zhí)行)。

每個(gè) Subject 都是觀察者。 - Subject 是一個(gè)有如下方法的對(duì)象: next(v)、error(e) 和 complete() 。要給 Subject 提供新值,只要調(diào)用 next(theValue),它會(huì)將值多播給已注冊(cè)監(jiān)聽該 Subject 的觀察者們。

var subject = new Rx.Subject(); //實(shí)例化一個(gè)Subject對(duì)象
subject.next(1); //向接受者發(fā)送一個(gè)消息流
subject.subscribe({
  next: value => console.log("observerA: " + value) //接受者A訂閱消息,獲取消息流中的數(shù)據(jù)
});
subject.subscribe({
  next: value => console.log("observerB: " + value) //接受者B訂閱消息,獲取消息流中的數(shù)據(jù)
});

這樣兩路接受者都能拿到發(fā)送的數(shù)據(jù)流:

observerA:1
observerB:1
2/ BehaviorSubject

BehaviorSubject 是 Subject 的一個(gè)衍生類,它將數(shù)據(jù)流中的最新值推送給接受者。

var subject = new Rx.BehaviorSubject(0); //聲明一個(gè) BehaviorSubject 對(duì)象
subject.next(1); //發(fā)送一個(gè)數(shù)據(jù)流
subject.next(2); //再發(fā)送一個(gè)數(shù)據(jù)流
subject.subscribe({
  next: v => console.log("observerA: " + v) //接受者 A 訂閱消息
});
subject.subscribe({
  next: v => console.log("observerB: " + v) //接受者 B 訂閱消息
});
subject.next(3); //再發(fā)送一個(gè)數(shù)據(jù)流

這樣,每次接受者只會(huì)接受最新最送的那個(gè)消息:

observerA:2
observerB:2
observerA:3
observerB:3
3/ ReplaySubject

ReplaySubject 類似于 BehaviorSubject,它可以發(fā)送舊值給新的訂閱者,但它還可以記錄 Observable 執(zhí)行的一部分。

當(dāng)創(chuàng)建 ReplaySubject 時(shí),你可以指定回放多少個(gè)值:

var subject = new Rx.ReplaySubject(3); // 為新的訂閱者緩沖3個(gè)值

subject.subscribe({
  next: v => console.log("observerA: " + v)
});

subject.next(1);
subject.next(2);
subject.next(3);
subject.next(4);

subject.subscribe({
  next: v => console.log("observerB: " + v)
});

subject.next(5);

輸出:

observerA: 1
observerA: 2
observerA: 3
observerA: 4
observerB: 2
observerB: 3
observerB: 4
observerA: 5
observerB: 5
4/ AsyncSubject

AsyncSubject 是另一個(gè) Subject 變體,只有當(dāng) Observable 執(zhí)行完成時(shí)(執(zhí)行 complete()),它才會(huì)將執(zhí)行的最后一個(gè)值發(fā)送給觀察者。

var subject = new Rx.AsyncSubject();

subject.subscribe({
  next: v => console.log("observerA: " + v)
});

subject.next(1);
subject.next(2);
subject.next(3);
subject.next(4);

subject.subscribe({
  next: v => console.log("observerB: " + v)
});

subject.next(5);
subject.complete();

輸出:

observerA: 5
observerB: 5
參考文檔

《PublishSubject,ReplaySubject,BehaviorSubject,AsyncSubject》

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101471.html

相關(guān)文章

  • RxJS 核心概念之Subject

    摘要:返回的對(duì)象同時(shí)是類型的,擁有方法。由于調(diào)用后,開始執(zhí)行,因此,會(huì)返回一個(gè)供調(diào)用者來終止執(zhí)行。是的一個(gè)衍生類,具有最新的值的概念。舉一個(gè)形象的例子,表示一個(gè)人的生日,而則表示一個(gè)人的歲數(shù)。 什么是Subject? 在RxJS中,Subject是一類特殊的Observable,它可以向多個(gè)Observer多路推送數(shù)值。普通的Observable并不具備多路推送的能力(每一個(gè)Observer...

    weij 評(píng)論0 收藏0
  • 使用RxJS管理React應(yīng)用狀態(tài)的實(shí)踐分享

    摘要:隨著前端應(yīng)用的復(fù)雜度越來越高,如何管理應(yīng)用的數(shù)據(jù)已經(jīng)是一個(gè)不可回避的問題。應(yīng)用的數(shù)據(jù)不是只有狀態(tài)的,還有事件異步常量等等。出于以上兩點(diǎn)原因,最終決定基于來設(shè)計(jì)一套管理應(yīng)用的狀態(tài)的解決方案。 隨著前端應(yīng)用的復(fù)雜度越來越高,如何管理應(yīng)用的數(shù)據(jù)已經(jīng)是一個(gè)不可回避的問題。當(dāng)你面對(duì)的是業(yè)務(wù)場景復(fù)雜、需求變動(dòng)頻繁、各種應(yīng)用數(shù)據(jù)互相關(guān)聯(lián)依賴的大型前端應(yīng)用時(shí),你會(huì)如何去管理應(yīng)用的狀態(tài)數(shù)據(jù)呢? 我們認(rèn)為...

    KunMinX 評(píng)論0 收藏0
  • Set & Map:新生的數(shù)據(jù)集合及其弱引用衍生

    摘要:前言新增了兩種基本的原生數(shù)據(jù)集合和加上和現(xiàn)在共有四種,以及由兩者衍生出的弱引用集合和。其本身是生成實(shí)例數(shù)據(jù)集合的構(gòu)造函數(shù),可以接受一個(gè)數(shù)組或具有接口的數(shù)據(jù)結(jié)構(gòu)作為參數(shù)用來初始化。返回鍵值對(duì)的遍歷器對(duì)象,鍵值對(duì)為鍵名鍵值。 前言 ES6新增了兩種基本的原生數(shù)據(jù)集合:Set和Map(加上Array和Object現(xiàn)在共有四種),以及由兩者衍生出的弱引用集合:WeakSet和WeakMap。從...

    AprilJ 評(píng)論0 收藏0
  • [譯]RxJS06——Subject

    摘要:舉例來說,每年都有生日是一道數(shù)據(jù)流,但是一個(gè)人的年齡卻是一個(gè)流。運(yùn)行結(jié)果顯示,第二個(gè)在訂閱之后,獲得了數(shù)據(jù)流中最后毫秒事件內(nèi)產(chǎn)生的和三個(gè)值。 原文:http://reactivex.io/rxjs/manu... Subject是什么? RxJS的Subject是Observable的一個(gè)特殊類型,他可以將流中的值廣播給眾多觀察者(Observer)。一般的Observalbe流是單一...

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

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

0條評(píng)論

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