【问题标题】:Upgrade to Angular 6- Rxjs 6 breaks HttpPost升级到 Angular 6-Rxjs 6 中断 HttpPost
【发布时间】:2018-07-20 04:30:03
【问题描述】:

传统上 httpService.post(url, payload, options) 返回一个Observable<T>,可以在订阅中轻松访问它。例如在下面的例子中,帖子会返回一个Observable<string>,可以很容易地用作

this.httpClientService.post<string>(url, payload, options)
.subscribe(x=> console.log(x));

但是现在升级后返回类型变成了Observable&lt;HttpEvent&lt;string&gt;&gt;,报错了

'Observable<HttpEvent<{}>>' is not assignable to type 'Observable<string>'

在我的旧代码中。

有人可以帮助我了解如何解析这个新的Observable&lt;HttpEvent&lt;T&gt;&gt;

【问题讨论】:

  • this.httpClientService.post&lt;Object&gt;(url, payload, options) .subscribe(x=&gt;{ console.log(x) }) 尝试将代码更改为这种格式

标签: angular rxjs angular6 angular-httpclient rxjs6


【解决方案1】:

你的 rxjs 版本是多少? 随着 Angular 6 的升级,我猜 rxjs 的版本也更新了,从 rxjs 的导入也是如此。 您可以使用rxjs-compat 来实现向后兼容性,这样您就无需更改导入和语法。

【讨论】:

  • 我相信这与 angular httpclient 服务而不是 rxjs 有关
  • 你是对的!我在下面阅读了您的评论,并且正如您提到的那样 - “http 帖子具有 'observe' 和 'responsetype' 设置”,因此这意味着您正在收听 Http 事件类型,例如发送请求或获得响应时。您可以将 Observe 设置为像这样 { observe: 'response' } 或删除 observe 属性,因此默认情况下它将返回响应而不是 Http 事件类型
  • 默认是event,我改成body
  • 找到这个https://alligator.io/angular/httpclient-intro/,它读到 - 默认情况下,HttpClient 返回响应的正文
【解决方案2】:

将帖子类型更改为&lt;any&gt;,希望这能解决问题 .您的 observable 返回了 object,您正尝试将其分配给 string

this.httpClientService.post<any>(url, payload, options)
.subscribe(x=>{
     console.log(x)
})

【讨论】:

  • http post中的options参数有'observe'和'responsetype'设置,可能跟这个有关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
相关资源
最近更新 更多