首页 > 解决方案 > Angular 8:observable.pipe() 不再工作了?

问题描述

我只是将我的应用程序从 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);
      }));
  }

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

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

标签: angularobservableangular8

解决方案


  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');)。检查开发工具日志的调试级别

推荐阅读