首页 > 解决方案 > rxjs 5 用于 map 、 catch 、 throw 转换为 6.5 语法以从后端获取响应 json

问题描述

嘿,我是 Angular 的下一个,我与一个使用非常旧的 Angular 的团队合作,我正在尝试升级很多东西,我以前的rxjs是 5.4 版本,现在我将它升级为 6.5 地图并捕获并且不再接受,并且我已经阅读了一些文章也如何转换它们,但仍然不清楚,因为大多数文章都没有解释如何通过 json() 获得响应

这是我以前的 rxjs 5.4 语法

import { Observable } from "rxjs/Observable";
import "rxjs/add/operator/catch";
import "rxjs/add/operator/map";
import "rxjs/add/observable/throw";

createDataParam(url, data, params) {
    return this.http
      .post(url, data, { params: params })
      .map(response => response.json())
      .catch(this.handleError);
  }

以及如何将其转换为rsjx最新版本语法?

import { Observable } from "rxjs";
import { map } from "rxjs/operators"

我试过.pipe(map(res => res.json()) )它不工作,而且抓住了

params mean is for token 

我很喜欢从你们那里得到一个非常简单的例子,所以我会试着理解它,我为可重用的方法创建了它,所以我可以使用任何组件

谢谢你已经阅读了这篇文章,希望我能在这里得到一些建议和帮助:)

标签: angularrxjs

解决方案


当您将新的 rxjs 运算符与 pipe 命令一起使用时,您必须记住它们返回一个 observable,因此您将无法返回带有 map 的 json 对象。map 返回的是您示例中的 json 对象的可观察值。然后,您需要订阅它以将数据作为 json 对象取出。

至于 catch ,如果你想在管道内使用它,现在是 catchError 。

createDataParam(url, data, params) {
    return this.http
      .post(url, data, { params: params })
      .pipe(
          map(response => response.json()),
          catchError(this.handleError),
       )
       .subscribe(result => result) 
  }

推荐阅读