如果我们得到正确的响应或错误,如何在订阅响应中实现一个动作?

How to realize an action in a subscribe response in cases we get a correct response or an error?

我正在尝试将加载微调器添加到登录功能。我已经创建了一个名为“loading”的变量,并且我希望当我从服务器获得响应时(不是之前),该变量变为 false(并在 html 中消失)。我使用下一个函数获得结果,将两个响应(正确响应和错误响应)中的变量更改为 false,但我想知道是否有更简洁的方法来做到这一点。

谢谢!

login() {
    this.loading = true;
    let model: UserLogin = Object.assign({}, this.formGroup.value);
    this.accountService.login(model)
      .subscribe(
        token => {
          this.setToken(token);
          this.loading = false;        
        },
        error => {
          alert(this.errorService.manageError(error)[""]);
          this.loading = false;
        }
      );
    }

您可以使用 RxJS finalize 运算符。它会在可观察对象的完成和错误时触发。

import { finalize } from 'rxjs/operators';

login() {
  this.loading = true;
  let model: UserLogin = Object.assign({}, this.formGroup.value);
  this.accountService.login(model).pipe(
    finalize(() => this.loading = false)
  ).subscribe(
    token => {
      this.setToken(token);
    },
    error => {
      alert(this.errorService.manageError(error)[""]);
    }
  );
}