【问题标题】:Angular 4 api call turning response to json returns undefinedAngular 4 api调用转向对json的响应返回未定义
【发布时间】:2018-08-02 05:16:07
【问题描述】:

我正在关注一个示例,他们正在像这样调用本地 Web 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 端点,因为在此之前我遇到了其他错误。

【问题讨论】:

    标签: json angular


    【解决方案1】:

    考虑改变:

    .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();
    });
    

    【讨论】:

    • 这确实解决了它。你能解释一下 => response.json() 和 =>{......} 的区别吗?
    • 我的理论是正确的。只要我在结束时返回 response.json(),我仍然可以使用我的 => { .... } 语法。
    • 正确,只需在response.json() 之前添加return。查看我的编辑
    【解决方案2】:

    你只是错误地使用了语法。

    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(这回答了您关于它为什么返回未定义的问题)。

    .....map((x,y,z) => ...)
    

    请注意,这次我们省略了大括号。替换 ... 的代码必须是单语句,并且是从函数返回的。

    .....map((x,y,z) => ...)
    .....map((x,y,z) => {return ...})
    

    这两行是等价的,因为 ... 是一个语句。

    希望重点清楚。

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多