【问题标题】:angular - show loading while rxjs subscription waits for data角度 - 在 rxjs 订阅等待数据时显示加载
【发布时间】:2020-02-29 04:55:48
【问题描述】:

我的 onInit 中有一个简单的订阅:

ngOnInit(): void {
    this.subscription = timer(0, 5000).pipe(
        switchMap(() => this.monitoringService.getHeartbeats())
      ).subscribe(data => this.heartbeats = data.data);
}

但我想显示一个简单的加载栏,同时订阅从服务器获取数据。有没有办法在开始时将this.loading 之类的变量设置为true,在获取数据时设置false

为了完整起见,这是我得到的心跳示例:

....
  {
    _id: 5e58595325c28e4470c90d45,
    customer: 5cab35ae9a39025a6b8cef7e,
    activeUsers: 11,
    usersLoggedIn: 7,
    terminals: [ [Object], [Object] ],
    heartbeatDate: 2020-02-28T00:05:39.277Z,
    __v: 0
  },
  {
    _id: 5e58593a25c28e4470c90d42,
    customer: 5cab35ae9a39025a6b8cef7e,
    activeUsers: 11,
    usersLoggedIn: 7,
    terminals: [ [Object], [Object] ],
    heartbeatDate: 2020-02-28T00:05:14.311Z,
    __v: 0
  },
  {
    _id: 5e5858aac78f000c70ac2468,
    customer: 5cab35ae9a39025a6b8cef7e,
    activeUsers: 11,
    usersLoggedIn: 7,
    terminals: [ [Object], [Object] ],
    heartbeatDate: 2020-02-28T00:02:50.575Z,
    __v: 0
  },
  {
    _id: 5e5858348b2d6d3d0c1d482e,
    customer: 5cab35ae9a39025a6b8cef7e,
    activeUsers: 11,
    usersLoggedIn: 7,
    terminals: [ [Object], [Object] ],
    heartbeatDate: 2020-02-28T00:00:52.306Z,
    __v: 0
  } 
....

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    试试:

    ngOnInit(): void {
        this.subscription = timer(0, 5000).pipe(
            tap(() => this.loading = true),
            switchMap(() => this.monitoringService.getHeartbeats())
          ).subscribe(data => { 
                               this.heartbeats = data.data; 
                               this.loading = false;
           }, err => this.loading = false ); // handle error how you want, just turn loading off as well
    }
    

    【讨论】:

    • 每次调用订阅时都应该触发加载。这是你的例子吗?
    • 不,在这只是第一次之前。我每次都使用tap 运算符进行编辑。一探究竟。对此感到抱歉。
    • 另一种使用运算符的方法:stackoverflow.com/questions/60207721/…
    • 在加载完成前取消订阅时,它将保持loading true 状态。您可以使用finalize 管道来解决这个问题,它将在完成、错误和取消/取消订阅时工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    相关资源
    最近更新 更多