长话短说:我有一个Angular应用程序,通过调用调用第二个数据服务的服务来初始化。中间服务从数据服务接收并处理其数据后,它必须通过Observable或Subject与应用通信,以使应用可以继续加载。我想使以后对同一方法的所有调用短路。
export class MiddleService {
private triedOnce = false;
private isLoadedSubject = new AsyncSubject();
public loadConfig (): AsyncSubject<any> {
if (!this.triedOnce) {
this.isLoadedSubject.next(false);
this.dataService.getConfiguration(...).subscribe(
(data) => {
// do stuff with data
this.isLoadedSubject.next(true);
}
);
this.isLoadedSubject.complete();
this.triedOnce = true;
}
return this.isLoadedSubject;
}
}
我想,第一个问题是使用这样的Subject是反模式还是非标准用途。 (Does this apply?)
第二,我觉得我应该重用并且能够重用isLoadedSubject
而不是需要一个单独的布尔值。我不确定如何在订阅及其complete
回调之外进行操作。 AsyncSubject
有一个isCompleted
属性,但它是私有的。
答案 0 :(得分:1)
我会做类似的事情:
export class MiddleService {
public readonly config$ = this.dataService.getConfiguration(...)
.pipe(shareReplay(1));
}
这将延迟获取配置,并将其缓存用于所有后续调用。