问题描述
我有以下代码:
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,不需要getter,也不需要订阅构造函数。
这应该可以完成工作:
class MyClass {
constructor(private someService:SomeService) { }
clientId$ = this.someService.someObservable.pipe(
map(val => val.clientId)
);
}
就访问最新值而言……您可以将其存储在局部变量中:
clientId$ = this.someService.someObservable.pipe(
map(val => val.clientId),tap(clientId => this.clientId = clientId)
);
但是通常也没有必要。如果您在模板中使用async
管道,则已经获得解包的最新值。
<h3 *ngIf="clientId$ | async as clientId">{{ clientId }}</h3>