首页 > 解决方案 > Angular 6 - Observable 永远不会抛出

问题描述

我正在寻找在 Angular 中处理 observable 的最佳方法。目前的设计是:

public login(email: string, password: string): Observable<string> {
    return this.http
      .post(environment.apiUrl + '/login', {
        email: email,
        password: password
      })
      .map(response => {
        this.authenticationService.setToken(response["token"]);
        return "OK;"
      })
      .catch(error => {
        console.error('LoginService::error', error);
        return throwError(error);
      });
  }

这一切都很好,但我不想无缘无故地返回“OK”。

我尝试了以下方法,但它说您不能将 Observable < void> 分配给 Observable < never>

public login(email: string, password: string): Observable<never> {
    return this.http
      .post(environment.apiUrl + '/login', {
        email: email,
        password: password
      })
      .map(response => {
        this.authenticationService.setToken(response["token"]);
      })
      .catch(error => {
        console.error('LoginService::error', error);
        return throwError(error);
      });
  }

标签: angularrxjsobservableangular6

解决方案


  public login(email: string, password: string) {
    return this.http
      .post(environment.apiUrl + '/login', {
        email: email,
        password: password
      }).pipe(
        tap({
          next: response => {
            this.authenticationService.setToken(response["token"]);
          }, 
          error: error => {
            console.error('LoginService::error', error);
          },
        }),
      )
  }

如果您愿意,点击操作符会为您的 Observable 添加一些逻辑,用于每次发射和错误/完成事件操作员不期望任何返回值并完全忽略它们,Observable 发生的其他所有事情都将照常进行。


推荐阅读