我正在关注一个例子,他们正在打电话给当地的网络api。
return this.http.get("http://localhost:26264/api/news").map((response: Response)=>{
response.json();
});
如果您在.json()
通话前看到响应的值,一切看起来都不错。
我正在做这件事,
var data = this.authService.Login(value.Email, value.Password).subscribe((res: any)=>{
console.log(res);
});
此时res的值是未定义的?忽略我正在为新闻控制器api调用登录方法这一事实。我更改了我的api端点,因为在此之前我遇到了其他错误。
答案 0 :(得分:4)
考虑改变:
.map((response: Response)=>{
response.json();
});
到
.map((response: Response) => response.json())
原因是......
.map(response: Response => response.json() )
说创建一个匿名函数并接受一个响应对象并从响应对象返回json方法(返回序列化为JSON的对象)
.map((response: Response)=>{
response.json();
});
表示创建一个接收响应对象的匿名函数,并在此匿名函数的范围内,从响应对象运行json方法,该方法不返回任何内容。
修复:
.map((response: Response)=>{
return response.json();
});
答案 1 :(得分:0)
您只是错误地使用语法。
return this.http.get("http://localhost:26264/api/news").map((response: Response)=>{
response.json();
});
看一下你的匿名函数(map中的函数)。 该函数接收Response类型的输入,然后在大括号内运行代码。为简单起见,您的代码等同于:
myJsonifyFunc(response: Response) {
response.json();
// notice there is no return statement!
}
return this.http.get("http://localhost:26264/api/news").map(myJsonifyFunc);
有两种方法可以将匿名函数写为函数参数:
.....map((x,y,z) => {...})
接收x,y,z参数并在{...}内运行代码。 要返回一个值,你应该在大括号内显式写“return”,否则函数将返回void(它回答你关于它为什么返回undefined的问题)。
.....map((x,y,z) => ...)
请注意,这次我们省略了花括号。替换代码......必须是单个语句,并从函数返回。
.....map((x,y,z) => ...)
.....map((x,y,z) => {return ...})
这两行是等价的,因为......是一个单一的陈述。
希望明确指出。