【发布时间】:2020-10-08 04:34:42
【问题描述】:
我有以下代码:
class MyClass {
private readonly clientId$: ReplaySubject<string>;
public get clientId(): Observable<string> {
return this.clientId$;
}
constructor([... things]) {
this.clientId$ = new ReplaySubject<string>(1);
someObservable
.pipe(
map(arg => {
// business logic and what not...
}))
.subscribe(clientId => {
this.clientId$.next(clientId);
});
}
}
我希望能够使用myClassInstance.clientId.value();,例如像一个行为主体。除了 clientId 的新订阅者获得旧值之外,someObservable 很少触发。
有什么想法吗? 提前谢谢!
【问题讨论】:
-
你为什么需要它? replaysubject 的缓冲区大小为 1,这本质上使其类似于 behaviorSubject。
-
我希望能够在 rxjs 之外使用它,就像一个简单的值一样。
-
你不能有另一个类变量并在你发出clientId的订阅块中分配最新的值吗?
-
BehaviorSubject中的同步 getter 是clientId.value或clientId.getValue()而不是clientId.value()。它仅在BehaviorSubject中可用。如果您需要,您可以为BehaviorSubject使用默认值null,而不是在订阅中使用它。 -
BehaviorSubject就是这样做的。如果您订阅BehaviorSubject,您将获得它的当前(即最新)值。
标签: angular rxjs behaviorsubject