无法阅读财产'订阅'在Angular 2中的嵌套调用中未定义

时间:2016-05-20 08:23:40

标签: rest callback angular

我想从company-list.component getCompanies()订阅company.service。但是我收到以下错误:

  

无法阅读财产'订阅'未定义的

这是代码:

company.service.ts

  getCompaniesOfUser() {
    let r;
    this.userService.getUser().subscribe(
      res=> r = res,
      err => console.log(err),
      ()=>(this.getCompaniesWithSpecificLink())
    )
  }

  getCompaniesWithSpecificLink() {    
    if (isAdmin == false) {
      url = '/user/companies';
    } else {
      url = '/companies';
    }
    return this.getCompanies(url);

  }

  getCompanies(url):Observable<Company[]> {  
    return this.http.get(this.host + url)
      .map((res:Response) => res.json());
  }

公司list.component.ts

companies:Company[];

public getTheCompanies() {
    this._companyService.getCompaniesOfUser()
      .subscribe(companies => this.companies = companies); <-- the error occurred here
}

1 个答案:

答案 0 :(得分:3)

必须在observable上使用Subscribe方法,但是getCompaniesOfUser()方法没有返回任何内容,因此是一个void方法。

如果您想呼叫背靠背休息服务。就像一个人的输入,取决于其他人的输入&#39;输出。您应该使用flatMap运算符。

请查看此答案,例如:https://stackoverflow.com/a/36712707/5706293

这样的事情应该有效:

getCompaniesOfUser() {
    return this.userService.getUser().flatMap( (resp) => {
        return this.getCompaniesWithSpecificLink();
        });
}