如何将订阅的数据作为输入传递给其他功能?

时间:2018-10-25 08:05:07

标签: angular rxjs

getActiveId函数将根据重新调整的ID返回ID,我需要使用函数getOpenIssues进行另一个HTTP调用以获取数据。

因此,在我的组件中,我订阅了这些功能,可以看到ID返回了getActiveId

我将ID传递给了getOpenIssues函数,它抛出的id未定义。

通过net搜索之后,无法访问预订方法之外的变量。

在这种情况下,如何将ID传递给其他功能?

请帮助,我无法继续进行。

Service.ts

getActiveId() {
  return this.http.get<any>(apiUrl);
}
getOpenIssues(id: string) {
  return this.http.get<any>(Url);
}

Component.ts

this.service.getActiveId()
.subscribe(response => this.id = response.id) // Returns ID 22407

this.service.getOpenIssues(this.id) // Should pass the ID 22407
.subscribe((response) => { })

2 个答案:

答案 0 :(得分:1)

在您的.component.ts中,由于两个函数都是异步的,因此您的getOpenIssuesgetActiveId完成之前被调用。

因此,您可以进行以下更改:

this.service.getActiveId()
.subscribe(response => {
  this.id = response.id;
  this.service.getOpenIssues(this.id).subscribe(issues=>console.log(issues));// Returns ID 22407
  }) 

您还可以查看RxJS的不同map运算符

this.service.getActiveId()
    .concatMap((id)=>this.service.getOpenIssues(id))
    .subscribe(issues=>console.log(issues))

答案 1 :(得分:0)

组件可以具有2种方法getActiveId()和getOpenIssues()。现在我们需要调用getActiveId(),该方法将根据服务的响应来调用第一个服务,并调用相同组件的另一个方法(如果需要,它将调用另一个服务)。

getActiveId() {
this.service.getActiveId()
.subscribe(response => {
this.id = response.id;
this.getOpenIssues();
});
}

getOpenIssues() {
this.service.getOpenIssues(this.id)
.subscribe(issues=> //Your logic);
}`