首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取RxJS主题或观察值的当前值?

如何获取RxJS主题或观察值的当前值?
EN

Stack Overflow用户
提问于 2016-05-07 22:54:36
回答 7查看 255.1K关注 0票数 274

我有一个Angular 2服务:

代码语言:javascript
复制
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的当前值。我该怎么做呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-05-07 22:56:26

SubjectObservable没有当前值。当发出一个值时,它会被传递给订阅者,然后Observable就会使用它。

如果你想要一个当前值,使用BehaviorSubject,它就是为这个目的而设计的。BehaviorSubject保留最后发出的值,并立即将其发送给新订阅者。

它还有一个getValue()方法来获取当前值。

票数 443
EN

Stack Overflow用户

发布于 2017-04-13 18:42:29

我也遇到过类似的情况,即延迟订阅的用户在主题价值到达后才订阅该主题。

我发现与BehaviorSubject类似的ReplaySubject在这种情况下很有魅力。这里有一个更好的解释的链接:http://reactivex.io/rxjs/manual/overview.html#replaysubject

票数 17
EN

Stack Overflow用户

发布于 2019-01-27 18:38:18

代码语言:javascript
复制
const observable = of('response')

function hasValue(value: any) {
  return value !== null && value !== undefined;
}

function getValue<T>(observable: Observable<T>): Promise<T> {
  return observable
    .pipe(
      filter(hasValue),
      first()
    )
    .toPromise();
}

const result = await getValue(observable)
// Do the logic with the result
// .................
// .................
// .................

你可以在这里查看关于如何实现它的完整文章。https://www.imkrish.com/blog/development/simple-way-get-value-from-observable

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37089977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档