【问题标题】:Angular 8 : observable.pipe() not working anymore?Angular 8:observable.pipe() 不再工作了?
【发布时间】:2019-12-18 13:17:35
【问题描述】:

我只是将我的应用程序从 Angular 7 升级到 Angular 8。 自迁移以来,我的一种方法似乎不再起作用。在 Observable 上(来自 HTTP POST),我想通过 .pipe() 执行一些操作。

调用者可以在返回的 Observable 上执行 .subscribe()。

login(username: string, password: string): Observable {
    const url =  `${this.baseUrl}/oauth/token`;
    const body = `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}&grant_type=password`;

    return this.http.post(url, body, this.httpOptions)
      .pipe( map(value => {
        console.info('Succeed');
        return of(true);
      }));
  }

不幸的是,地图似乎不再执行(控制台没有登录)。

有人帮我找到解决方法吗? 提前致谢。

【问题讨论】:

  • 你试过加.pipe(catchError((error: HttpErrorResponse) => {}吗?
  • 对了,你为什么要这么做?
  • 是的,没有错误。调用者收到http请求的响应...
  • 我的目的是执行一些操作并将 HTTP 响应转换为返回“格式化”值(而不是 HTTP 响应 OAUTH2)

标签: angular observable angular8


【解决方案1】:
  1. 使用可观察返回的值进行映射操作,我认为这是您应该更改的第一件事:
return this.http.post(url, body, this.httpOptions)
      .pipe( map(value => {
        console.info('Succeed');
        return of(true); // Here is an error. Don't use `of`.
      }));
  1. 管道操作员仍在工作。因此,您的 HTTP 请求中可能存在错误。考虑改写如下并检查错误日志:
return this.http.post(url, body, this.httpOptions)
      .pipe( 
         map(value => {
           console.info('Succeed');
           return true;
         }),
         catchError(err => {
           console.error('HTTP ERROR: ', err);
           return throwError(err);
         })
       );

  1. 我注意到,您正在使用 info 操作 (console.info('Succeed');)。检查开发工具日志的调试级别

【讨论】:

  • 当我使用您的代码时,它运行良好,并且控制台中没有记录任何错误。但是如果我只删除catchError,它就不再起作用了。我不明白为什么,因为 HTTP 调用没有错误......无论如何,谢谢你的帮助:)
【解决方案2】:

您使用的映射运算符用于映射原始/原始值。

例如:你可以获取一个字符串,然后返回一个数字,或者获取一个对象并返回另一个对象。

但它不会打开返回的 observable,因为您需要使用 switchMap(参考:https://www.learnrxjs.io/operators/transformation/switchmap.html

在这种情况下,不需要使用switchMap,只需返回true 而不是of(true) 应该会有所帮助。

在调用代码方面,确保你记得订阅从login返回的observable,否则永远不会发出http请求。

【讨论】:

  • 感谢有关地图和 switchMap 的详细信息。我是 Angular 的新手(这是一个学习项目),所以我可能没有采取正确的方法
猜你喜欢
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多