javascript - RxJS 中的 Promise 'finally' 回调等价物

标签 javascript angular typescript rxjs

我有一个组件可以从 API 获取一些数据。该组件有一个 loading 成员变量,用于确定是否应显示加载图标。数据获取完成后,loading 设置为 false,以隐藏加载图标。无论是否发生错误,这都应该发生。

目前,我是这样实现的:

export class MyComponent implements OnInit {

  loading = true;
  data;

  constructor(private dataService: DataService) { }

  ngOnInit() {
    this.dataService.getData().subscribe(data => {
      this.data = data;
      this.loading = false;
    },
    () => {
      this.loading = false;
    });
  }

}

我想知道是否有办法消除 this.loading = false 的重复。如果我使用 Promises,这就是我要使用的 Promise.finally()回调 - 但我不是。 RxJS 中是否有等效项或更好的实现方法?

最佳答案

从 RXJS 5.5 开始,使用“finalize”运算符:

ngOnInit() {
  this.dataService.getData()
  .pipe(
    finalize(() => this.loading = false)
  )
  .subscribe(data => {
    this.data = data;
  });
}

关于javascript - RxJS 中的 Promise 'finally' 回调等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49799286/

相关文章:

javascript - @storybook/angular 无法在故事索引上加载 scss 文件

javascript - 使用 InjectionToken 进行注入(inject)?

javascript - 定位对象内的数组 - Angular 2 中的 Observables

angular - Visual Studio/Angular - 类型参数不可分配给参数类型 ObjectIterateeCustom<any[], boolean>

javascript - 创建一个每次选择正确答案都会上升的分数

javascript - 如何使用 jQuery 显示/隐藏事件重新加载 jQuery 幻灯片?

javascript - Angular : Error: Uncaught (in promise) at webpackAsyncContext (eval at ./src/$$_lazy_route_resource

javascript - 将 NodeJs 导入 TypeScript 编译错误

javascript - JSON 与多个连接

angular - 如何将参数传递给 Angular 中的模态