Rxjs 在多个订阅后返回一个可观察的角度6
您好,我有一个适用于多个应用程序的全局服务,我希望创建一个具有多个订阅的方法,以便存储和初始化我的所有数据,我希望在我的appComponent中订阅此方法,但我不知道如何做到这一点 为我效劳Rxjs 在多个订阅后返回一个可观察的角度6,rxjs,observable,angular6,subscribe,Rxjs,Observable,Angular6,Subscribe,您好,我有一个适用于多个应用程序的全局服务,我希望创建一个具有多个订阅的方法,以便存储和初始化我的所有数据,我希望在我的appComponent中订阅此方法,但我不知道如何做到这一点 为我效劳 private initData(isLogged: boolean) { this.http.get('/api/conf').subscribe( conf => { this.http.get('api/param').subscribe(
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
}
我怎样才能做到?我在文档中找不到这些信息。谢谢你的帮助。这对我的工作很重要,我花了这么多时间进行了白费的研究:(因此,既然你想一个接一个地发出多个异步请求,你应该使用可观察函数(这非常类似于一个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”将所有异步请求链接在一起,以便仅在前一个请求完成后调用它们
组件文件看起来不错,应该可以与此新服务一起使用
一般来说,你永远不应该订阅可观察的内部
您应该使用map、flatMap、,
分叉连接
您好,谢谢您的回复,我已经查找了文档并找到了我的回复:initApp():Observable{return this.http.get('./assets/tata.json').pipe(mergeMap((tata:any)=>{console.log(tata.key)return this.http.get('./assets/tututuu.json').pipe(mergeMap((tutu:any)=>{console.log(tutu.key)返回this.http.get('./assets/titi.json')}