Rxjs 在多个订阅后返回一个可观察的角度6

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(

您好,我有一个适用于多个应用程序的全局服务,我希望创建一个具有多个订阅的方法,以便存储和初始化我的所有数据,我希望在我的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
}

我怎样才能做到?我在文档中找不到这些信息。谢谢你的帮助。这对我的工作很重要,我花了这么多时间进行了白费的研究:(

因此,既然你想一个接一个地发出多个异步请求,你应该使用可观察函数(这非常类似于一个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')}