首页 > 解决方案 > 当我在 angular7 中将 http 升级到 httpClient 时,rxjs 地图出现错误

问题描述

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

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()))

我该如何解决?

标签: angularangular7angular-httpclient

解决方案


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


推荐阅读