亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取RxJS Subject或Observable的當前值?

如何獲取RxJS Subject或Observable的當前值?

我有一個Angular 2服務:import {Storage} from './storage';import {Injectable} from 'angular2/core';import {Subject}    from 'rxjs/Subject';@Injectable()export class SessionStorage extends Storage {  private _isLoggedInSource = new Subject<boolean>();  isLoggedIn = this._isLoggedInSource.asObservable();  constructor() {    super('session');  }  setIsLoggedIn(value: boolean) {    this.setItem('_isLoggedIn', value, () => {      this._isLoggedInSource.next(value);    });  }}一切正常。但是我還有另一個不需要訂閱的組件,它只需要在某個時間點獲取isLoggedIn的當前值即可。我怎樣才能做到這一點?
查看完整描述

3 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

一個SubjectObservable沒有的電流值。發出值時,將其傳遞給訂戶并Observable使用它完成。

如果要使用當前值,請使用BehaviorSubject專門用于該目的的值。BehaviorSubject保留最后發出的值,并立即將其發送給新訂戶。

它還具有一種getValue()獲取當前值的方法。


查看完整回答
反對 回復 2019-10-15
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

應該 從“可觀察/主題”中獲取值之外的唯一方法是訂閱!

如果您使用的getValue()是聲明式范例,則必須執行某些操作。它可以作為逃生艙口,但是99.9%的時間不應該使用getValue()。有一些有趣的事情getValue()可以做:如果主題未訂閱,它將引發錯誤;如果主題由于錯誤而死亡,它將阻止您獲取值。等等。但是,再次出現是為了逃脫在極少數情況下孵化。

有幾種以“ Rx-y”方式從Subject或Observable獲取最新值的方法:

  1. 使用BehaviorSubject:但實際上是訂閱它。首次訂閱時BehaviorSubject,它將同步發送它收到或初始化時使用的先前值。

  2. 使用ReplaySubject(N):這將緩存N值并將其重播給新訂戶。

  3. A.withLatestFrom(B):使用此運算符可以B在可觀察到的A發射時從可觀察的獲取最新值。將在數組中同時提供兩個值[a, b]

  4. A.combineLatest(B):使用此操作來得到最新的值AB每一次無論是AB發出。將在數組中同時提供兩個值。

  5. shareReplay():通過進行可觀察的多播ReplaySubject,但允許您在發生錯誤時重試可觀察的。(基本上,它為您提供了promise-y緩存行為)。

  6. publishReplay(),publishBehavior(initialValue),multicast(subject: BehaviorSubject | ReplaySubject),等:其它運營商,充分利用BehaviorSubjectReplaySubject。相同事物的口味不同,它們基本上通過將所有通知集中到主題中來多播可觀察的源。您需要致電connect()以訂閱該主題的來源。


查看完整回答
反對 回復 2019-10-15
  • 3 回答
  • 0 關注
  • 2621 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號