我有一个单例服务,它仅从端点获取用户。 然后将用户注入到需要的每个组件中。 问题在于,在依赖于用户值的组件中还有其他功能要执行(即,在执行所述功能之前等待用户值)。
我如何在继续之前从服务中“等待”值?显然,此等待仅在应用程序的初始加载时才需要,而singlton将已经具有其后继组件的实例。
服务组件:
userDetails:IEmployee = {};
constructor(private service: ServiceCaller) {
this.User().subscribe((x) => {
this.userDetails = x;
});
}
public User():Observable<IEmployee> {
if(this.userDetails == undefined){
return this.service.get('/some/url')
.map((resp: IResponse) => {
return resp.Response
});
}
else {
//How to return an observable of this.userDetails?
let obs = Observable.create((observer:any) => {
observer.next(this.userDetails);
});
return obs;
}
}
}
其他组件:
this.userService.User().subscribe((x) => {
//result empty
});
我不确定我是否正确地解决了这个问题,但会有所帮助。
答案 0 :(得分:0)
我认为您可以摆脱服务构造函数中的this.User()
调用。
只需在类中定义变量userDetails
,然后使用User()
方法,如:
public User():Observable<IEmployee> {
if(this.userDetails === undefined){
return this.service.get('/some/url')
.do((resp: IResponse) => {
this.userDetails = resp.Response
})
.map((resp: IResponse) => {
return resp.Response
});
}
else {
return Observable.of(this.userDetails)
}
}
只要有任何组件可以订阅,如果userDetails
还不存在,则呼叫将到达端点。