【问题标题】:rxjs map is giving an error when i upgrade http to httpClient in angular7当我在 angular7 中将 http 升级到 httpClient 时,rxjs 地图出现错误
【发布时间】:2019-09-13 17:46:23
【问题描述】:

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

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

我该如何解决?

【问题讨论】:

  • 请参考文档:angular.io/guide/http
  • 现在你已经得到了答案,但是为了将来,请把你得到的错误也发布出来。 “编译器给出错误”并不总是足够的信息

标签: angular angular7 angular-httpclient


【解决方案1】:

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

【讨论】:

  • 如果您要复制粘贴其他人的部分答案,请注明...stackoverflow.com/a/45780553/6294072
  • 那么我应该将这个.pipe(map(res => res.json())) 替换为.pipe() 吗?
  • 应该可以,但你也可以删除整行
  • 你根本不需要使用 .pipe() ,只需留下你的代码 .subscribe 即可。
  • 你的意思是.generateApiRequest({ route: Constants.API_ROUTES.USER_LOGIN.route, type: Constants.API_ROUTES.USER_LOGIN.type, body: body }) .subscribe(response => { resolve(response); }); 而不是.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); });
【解决方案2】:

由于 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);
     });
  });
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 2021-09-26
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多