Angular 4 api调用转向响应json返回undefined

时间:2017-06-15 17:01:10

标签: json angular

我正在关注一个例子,他们正在打电话给当地的网络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端点,因为在此之前我遇到了其他错误。

2 个答案:

答案 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 ...})

这两行是等价的,因为......是一个单一的陈述。

希望明确指出。