【问题标题】:Angular 6 + rxjs - Mapped HTTP Response not returning response;Angular 6 + rxjs - 映射的 HTTP 响应不返回响应;
【发布时间】:2019-02-03 18:36:13
【问题描述】:

我有以下 http POST 试图返回到另一个函数:

return this.http.post(ENDPOINT_URL + 'MY-JWT-VALIDATION' + token, {observe: 'response'}, {headers: headers})
 .pipe(map( (res) => { return res; } ));

但是,我从返回中得到的是一个 Observable 对象,其中包含所有数据与调用的实际响应。我已经尝试从 map 更改为 tapsubscribe 以及所有内容。

Google 似乎推断我这样做是正确的,但由于某种原因,我无法得到回复……即使我只是返回一个静态字符串。

在这个问题上卡了一个小时。我的其他 http.post 调用似乎工作正常,并且带有相同的逻辑,尽管我首先将它们传递给一个函数。

我是否忽略了什么?

【问题讨论】:

  • 那么,那个sn-p的返回类型是Observable<Object>,对吧?你期望什么? Observable<HttpResponse<Object>>?不确定您对 具有所有数据的 Observable 对象与调用的实际响应的含义
  • 好吧,如果您正在观察响应 {observe: 'response'},您当然会收到响应中的所有数据;)删除它以获取数据。
  • @AJT_82 不能这样,因为第三个参数是请求的选项。应用默认观察。
  • @Jota.Toledo - 我的代码中的返回类型(来自帮助工具栏)显示为Observable<string>,但当我打印出来时它是Observable<object> 的对象。我希望收到来自服务器的实际 JSON 响应,就像我的所有其他 http.post 请求一样。该 JSON 应该类似于我从我的 REST API 测试程序中获得的内容,例如:{ "code": "jwt_auth_no_auth_header", "message": "Authorization header not found.", "data": { "status": 403 } }(所以是的,我相信 Observable<HttpResponse<Object>> 是正确的,我需要快速检查文档)
  • @Jota.Toledo 你说得对,我看起来太仓促了,只关注{observe: 'response'}:D

标签: angular http rxjs angular-httpclient


【解决方案1】:

答案由 cmets 中的@AJT_82 解决。

问题不在于我发布的函数行,而是我在另一个页面上对函数的调用——我没有订阅

我原来的this.test = this.authenticationService.validateAuthToken(localStorage.getItem('jwt_token'));

需要 subscribe 并实际获取要分配的数据.. 而不是像傻瓜一样继续尝试将 Observable 分配回我的 this.test 变量:this.authenticationService.validateAuthToken(localStorage.getItem('jwt_token')).subscribe( data => this.test = data );

【讨论】:

  • 另外忘了提...如果您不想使用subscribe(),您也可以在模板中使用async 管道,但是在深入挖掘时会遇到Angular 的奥秘 :) 虽然我更喜欢订阅,但从来没有喜欢过异步管道。但这是我个人的看法;)很多人都喜欢它!
  • 由于我看不到你的代码,我不知道到底发生了什么,但我想这与这是异步的事实有关。在这种情况下,这应该可以帮助您:stackoverflow.com/questions/43055706/…
  • @AJT_82 - 确认;很抱歉把你拉回来——在你发布之前我设法弄清楚了=)再次感谢!我现在就让你一个人呆着!哈哈;享受你的夜晚!
猜你喜欢
  • 1970-01-01
  • 2020-02-05
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2017-04-09
  • 1970-01-01
相关资源
最近更新 更多