【问题标题】:How to perform an action after a subscription has completed订阅完成后如何执行操作
【发布时间】:2021-08-02 13:57:45
【问题描述】:

我对 Angular 还比较陌生,但仍在努力解决订阅问题。我有一个函数可以根据用户的操作执行多个 http 请求,即删除一些东西,更新一些东西。在发送这些请求并完成操作之后,我想运行一个“刷新”功能,这将只是一个获取请求以刷新用户看到的数据。但是在刷新数据之前不是等待初始请求完成,有没有办法可以实现这一点?

例如,它看起来像这样:

private userData = [];

refresh() {
   service.getData()
      .subscribe(data => {
         this.userData.push(data);
      });
}

saveChanges() {
   this.userData.forEach(data => {
      if (data.changed) {
         service.update(data.id)
            .subscribe(res => {
               console.log(res);
            }
      } else if (data.deleted) {
         service.delete(data.id)
            .subscribe(res => {
               console.log(res);
            }
      }
   }
   
   // need this after the above has completed
   this.refresh();
}

任何帮助将不胜感激

【问题讨论】:

标签: angular typescript


【解决方案1】:

您可以使用forkJoin 并行执行您的HTTP 调用。 但我建议您重新设计您的 APIs 以便能够执行批量操作。

使用forkJoin -

Observable
.forkJoin(this.userData
  .map((data) =>
  {
    if(data.changed) {
      return service.update(data.id)
    } else if (data.deleted) {
        return service.delete(data.id)  
    }
  }))
.subscribe((data) => { 
    console.log(data);
  this.refresh();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多