摘要:實例化一個對象向接受者發送一個消息流接受者訂閱消息,獲取消息流中的數據接受者訂閱消息,獲取消息流中的數據這樣兩路接受者都能拿到發送的數據流是的一個衍生類,它將數據流中的最新值推送給接受者。
Rxjs_Subject 及其衍生類
在 RxJS 中,Observable 有一些特殊的類,在消息通信中使用比較頻繁,下面主要介紹較常用的幾個類:
1/ SubjectSubject 可以實現一個消息向多個訂閱者推送消息。
Subject 是一種特殊類型的 Observable,它允許將值多播給多個觀察者,所以 Subject 是多播的,而普通的 Observables 是單播的(每個已訂閱的觀察者都擁有 Observable 的獨立執行)。每個 Subject 都是觀察者。 - Subject 是一個有如下方法的對象: next(v)、error(e) 和 complete() 。要給 Subject 提供新值,只要調用 next(theValue),它會將值多播給已注冊監聽該 Subject 的觀察者們。
var subject = new Rx.Subject(); //實例化一個Subject對象 subject.next(1); //向接受者發送一個消息流 subject.subscribe({ next: value => console.log("observerA: " + value) //接受者A訂閱消息,獲取消息流中的數據 }); subject.subscribe({ next: value => console.log("observerB: " + value) //接受者B訂閱消息,獲取消息流中的數據 });
這樣兩路接受者都能拿到發送的數據流:
observerA:1 observerB:12/ BehaviorSubject
BehaviorSubject 是 Subject 的一個衍生類,它將數據流中的最新值推送給接受者。
var subject = new Rx.BehaviorSubject(0); //聲明一個 BehaviorSubject 對象 subject.next(1); //發送一個數據流 subject.next(2); //再發送一個數據流 subject.subscribe({ next: v => console.log("observerA: " + v) //接受者 A 訂閱消息 }); subject.subscribe({ next: v => console.log("observerB: " + v) //接受者 B 訂閱消息 }); subject.next(3); //再發送一個數據流
這樣,每次接受者只會接受最新最送的那個消息:
observerA:2 observerB:2 observerA:3 observerB:33/ ReplaySubject
ReplaySubject 類似于 BehaviorSubject,它可以發送舊值給新的訂閱者,但它還可以記錄 Observable 執行的一部分。
當創建 ReplaySubject 時,你可以指定回放多少個值:
var subject = new Rx.ReplaySubject(3); // 為新的訂閱者緩沖3個值 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: 54/ AsyncSubject
AsyncSubject 是另一個 Subject 變體,只有當 Observable 執行完成時(執行 complete()),它才會將執行的最后一個值發送給觀察者。
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》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101471.html
摘要:返回的對象同時是類型的,擁有方法。由于調用后,開始執行,因此,會返回一個供調用者來終止執行。是的一個衍生類,具有最新的值的概念。舉一個形象的例子,表示一個人的生日,而則表示一個人的歲數。 什么是Subject? 在RxJS中,Subject是一類特殊的Observable,它可以向多個Observer多路推送數值。普通的Observable并不具備多路推送的能力(每一個Observer...
摘要:隨著前端應用的復雜度越來越高,如何管理應用的數據已經是一個不可回避的問題。應用的數據不是只有狀態的,還有事件異步常量等等。出于以上兩點原因,最終決定基于來設計一套管理應用的狀態的解決方案。 隨著前端應用的復雜度越來越高,如何管理應用的數據已經是一個不可回避的問題。當你面對的是業務場景復雜、需求變動頻繁、各種應用數據互相關聯依賴的大型前端應用時,你會如何去管理應用的狀態數據呢? 我們認為...
摘要:前言新增了兩種基本的原生數據集合和加上和現在共有四種,以及由兩者衍生出的弱引用集合和。其本身是生成實例數據集合的構造函數,可以接受一個數組或具有接口的數據結構作為參數用來初始化。返回鍵值對的遍歷器對象,鍵值對為鍵名鍵值。 前言 ES6新增了兩種基本的原生數據集合:Set和Map(加上Array和Object現在共有四種),以及由兩者衍生出的弱引用集合:WeakSet和WeakMap。從...
摘要:舉例來說,每年都有生日是一道數據流,但是一個人的年齡卻是一個流。運行結果顯示,第二個在訂閱之后,獲得了數據流中最后毫秒事件內產生的和三個值。 原文:http://reactivex.io/rxjs/manu... Subject是什么? RxJS的Subject是Observable的一個特殊類型,他可以將流中的值廣播給眾多觀察者(Observer)。一般的Observalbe流是單一...
閱讀 1907·2021-09-23 11:21
閱讀 1693·2019-08-29 17:27
閱讀 1053·2019-08-29 17:03
閱讀 719·2019-08-29 15:07
閱讀 1915·2019-08-29 11:13
閱讀 2374·2019-08-26 12:14
閱讀 904·2019-08-26 11:52
閱讀 1729·2019-08-23 17:09