您好我有几个应用程序的全局服务,我希望制作一个方法有几个订阅,以存储和初始化我的所有数据,我希望在我的appComponent订阅此方法,但我不知道如何做那个
在我的服务中
private initData(isLogged: boolean) {
this.http.get('/api/conf').subscribe(
conf => {
this.http.get('api/param').subscribe(
tokResp => {
this.appParams.token = tkResp.queoval;
this.appParams.culture = tkResp.culture;
this.appParams.GMT = tkResp.gmt;
this.http.get('/api/trad').subscribe(
trad => {
this.label = trad
// return an Observable
}
)
}
)
}
)
}
在我的AppComponent中
this.service.initData().subscribe(
result => {
this.test = result
}
我该怎么做?我在文档中找不到相关信息。谢谢您的帮助。这对我的工作很重要,我花了很多时间无所事事地研究:(
答案 0 :(得分:1)
因此,既然你想要一个接一个地创建多个异步请求,你应该使用observable函数".flatMap"(这非常类似于Promises" .then")。 " .flatMap"函数允许您等到第一个请求完成后再继续。
因此,在您的情况下,您希望您的服务看起来像这样:
private initData(isLogged: boolean) {
return this.http.get('/api/conf').flatMap(
conf => {
return this.http.get('api/param');
}
).flatMap(
tokResp => {
this.appParams.token = tkResp.queoval;
this.appParams.culture = tkResp.culture;
this.appParams.GMT = tkResp.gmt;
return this.http.get('/api/trad');
}
).flatMap(
trad => {
this.label = trad;
return trad;
}
);
}
此函数将所有异步请求通过" .flatMap"链接在一起。这样只有在上一个请求完成后才会调用它们。
组件文件看起来很好,应该可以使用这个新服务。
总的来说,你永远不应该订阅内部的observable 的服务。你应该使用map,flatMap等函数 forkJoin ......