我有一个函数,该函数有多个使用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;
}
});
}
}
答案 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")
})