当我在 angular7 中将 http 升级到 httpClient 时,rxjs 地图出现错误

rxjs map is giving an error when i upgrade http to httpClient in angular7

我有一个服务,其中我有这样的登录功能

public userLogin(body) {
 return new Promise((resolve, reject) => {
  this.apiService
    .generateApiRequest({
      route: Constants.API_ROUTES.USER_LOGIN.route,
      type: Constants.API_ROUTES.USER_LOGIN.type,
      body: body
    })
    .map(res => res.json())
    .subscribe(response => {
      resolve(response);
     });
   });
 }

并在这样的实用程序中具有 generateApiRequest 功能

generateApiRequest(request, isTokened = false) {
    var res;
    let response;
    if (!request.headers) {
        request.headers = new HttpHeaders();
    }
    if (isTokened) {
        request.headers.append('Token', this.localCache.getToken());
    }
    switch (request.type) {
        case Constants.REQUEST_TYPE.GET:
            response = this.get(request);
            break;
        case Constants.REQUEST_TYPE.POST:
            response = this.post(request);
            break;
        case Constants.REQUEST_TYPE.PUT:
            response = this.put(request);
            break;
        case Constants.REQUEST_TYPE.DELETE:
            response = this.delete(request);
            break;
    }
    return response;
}

当我将旧的 http 升级到新的 HttpClient 之后,我必须更改管道函数中的映射,所以我这样做了

public userLogin(body) {
return new Promise((resolve, reject) => {
  this.apiService
    .generateApiRequest({
      route: Constants.API_ROUTES.USER_LOGIN.route,
      type: Constants.API_ROUTES.USER_LOGIN.type,
      body: body
    })
    .pipe(map(res => res.json()))
    .subscribe(response => {
      resolve(response);
     });
  });
 }

但是编译器在这一行报错.pipe(map(res => res.json()))

我该如何解决?

是的,那是因为默认情况下新的 http 客户端会隐式调用 res.json(),您不需要自己手动调用。只需删除 .json() 调用,因此您根本不需要在您的情况下使用 'map'。

因为 Angular Http 客户端已经映射来自 API 的默认响应是 JSON。

您可以简单地删除地图

public userLogin(body) {
 return new Promise((resolve, reject) => {
  this.apiService
    .generateApiRequest({
      route: Constants.API_ROUTES.USER_LOGIN.route,
      type: Constants.API_ROUTES.USER_LOGIN.type,
      body: body
    })
    .subscribe(response => {
      resolve(response);
     });
  });
 }