如何从角度2中的函数返回订阅的数据?

时间:2019-04-11 21:33:14

标签: angular

我有一个函数,该函数有多个使用for循环的API调用。我想连接所有已订阅的响应,并在订阅最后一个API调用的数据时返回它。

我能够在函数内部获取合并的数据,但是返回值在调用它的位置变得不确定。我正在调用此函数来映射响应。这些都是我服务的一部分,而不是任何组成部分。我无法更改结构,所以即使不是正确的方法,也有可行的解决方案吗?我刚接触Angular 2。

call()
{
    http.get(url)                                                            
        .map((res) => this.doll(res)) /*here the function returning undefined */
        .subscribe(/*something*/);
}
doll(res) : Observable /*type*/
{                                                                           
   for(looping through this APIs)                                                
   {                                                                               
   http.get(url)                                                              
       .map((res) => res)                                                   
       .subscribe((data: any) =>{                                         
           /*concatenate response */                                           
           if(certain condition)                                             
           {                                                               
               /*getting all the data together */                                
               console.log(data); /*working fine and getting the desired data*/    
               return data;                                                   
           }                                                        
       });                                                               
   }                                                                               
}

1 个答案:

答案 0 :(得分:0)

Tirtha,您必须使用forkJoin来获得一个唯一的可观察对象。然后,您可以订阅可观察的。通常,您使用服务(用于管理呼叫)和订阅该服务的组件

//your service
doll() : Observable<any[]> //return an array of anys
{      
   //I supouse you has in APIS some like
   APIS=[this.http.get("url1"),this.http.get("url2"),this.http.get("url3")...]
   return forkJoin(APIS);                                                                   
}


//So, In a component (if you inject hte service), you can subscribe to "doll"
this.myService.doll().subscribe(res=>{
    console.log(res[0]) //the response to http.get("url1")
    console.log(res[1]) //the response to http.get("url2")
})