2017-01-11 111 views
0

我使用ASP.NET Core和Angular 2(版本〜2.2.0)和Rxjs(版本^ 5.0 0.0-rc.5)。 angular.io文档中的代码示例适用于Angular 2的In Memory Web API,但是当我向httpd.get调用C#控制器时,它会失败。数据正在返回。下面的代码行不起作用:Angular 2 RxJs Promise对http.get调用C#控制器不起作用,而Angular 2在内存Web API中起作用

getHeroes(): Promise<Hero[]> { 
return this.http.get(this.heroesUrl) 
      .toPromise() 
      .then(response => response.json().data as Hero[]) 
      .catch(this.handleError); 
    } 

我已经改变了代码和这些代码以下行做的工作:

getHeroes(): Hero[] { 
    this.http.get(this.heroesUrl).map(response => response.json()).subscribe(heroes => { 
     this.heroes = heroes; 
    }) 
    return this.heroes; 
} 

谁能帮助?我真的需要获得第一行代码才能工作,因为第二行代码无法按计划运行,只是表明数据正在返回并显示。

+2

请说明您的具体问题或添加额外的细节,突显正是你需要的。正如目前所写,很难确切地说出你在问什么。请参阅“如何问问”页面以获取有关澄清此问题的帮助。 – olsn

+0

为什么你在一个地方使用'response.json()。data',而在另一个地方只使用'response.json()'?它不应该一样吗? – chrigu

+0

从代码的第二个例子可以清楚的看到,数据是从C#Controller返回的,并且由Angular 2显示。第一个代码示例来自angular.io文档,Promise不起作用。我可能会将Promise更改为Observable以使其起作用。我不清楚为什么Promise不起作用。 – Mark

回答

0

您可以使用承诺这样

return this.http.get(this.heroesUrl) 
.map(response => response.json() as Ge) 
     .toPromise() 
     .then(response => response.json().data as Hero[]) 
     .catch(this.handleError); 

}