2017-06-22 81 views
3

我正在从Angular 4代码调用Web服务并订阅响应。当响应来临时,我需要解析它并使用解析的信息调用另一个web服务(然后再次订阅响应)。Angular 4 - 链接订阅

如何使用Rxjs订阅来实现此链接。

在下面的代码中,我打电话给客户的Web服务以获取他的PIN码。当我得到这一点,只有那时我需要调用第二休息服务与PIN码作为输入。

fetchCoordinates() { 

    this.myService.get('http://<server>:<port>/customer') 
     .subscribe(
     (response: Response) => { 

     let pinUrl = JSON.parse(response.text()).items[0].pin; 
     // Take the output from first rest call, and pass it to the second call 
     this.myService.get(pinUrl).subscribe(
      (response: Response) => { 
      console.log(response.text()); 
      } 
     ) 
     }, 
     (error) => console.log('Error ' + error) 
    ) 
    } 

这是链接订阅的正确方法吗?第二次服务的结果返回后,我需要再做一次Web服务。它将进一步嵌套代码块。

+1

您已经正确吧!问题是什么? –

+0

想要检查这是否是这样做的正确方法,因为它会创建嵌套代码块。更新了问题以反映这一点。 – kayasa

回答

5

这将是与使用flatMap清洁所以只有一个订阅:

this.myService.get('http://<server>:<port>/customer') 
.flatMap((response: Response) => { 
    let pinUrl = JSON.parse(response.text()).items[0].pin; 
    return this.myService.get(pinUrl); 
}) 
.subscribe((response: Response) => { 
    console.log(response.text()); 
}); 

要了解什么flatMap确实,看看这个:https://blog.thoughtram.io/angular/2016/01/06/taking-advantage-of-observables-in-angular2.html

+1

稍微解释'flatMap'或提供有用的链接,以便它可以帮助正在寻找这种解决方案的人。 – SaiUnique