相关疑难解决方法(0)

Angular4 - 如何确保 ngOnDestroy 在离开之前完成

我有一个对象列表。用户可以单击其中一个,然后加载一个子组件来编辑该组件。

我遇到的问题是,当用户返回列表组件时,子组件必须在 ngOnDestroy 方法中进行一些清理 - 这需要调用服务器来对对象进行最终的“修补”。有时此处理可能会有点慢。

当然,发生的情况是用户返回列表,并且该 api 调用在数据库事务完成之前完成ngOnDestroy,因此用户看到的是过时的数据。

  ngOnDestroy(){
    this.destroy$.next();
    this.template.template_items.forEach((item, index) => {
      // mark uncompleted items for deletion
      if (!item.is_completed) {
        this.template.template_items[index]['_destroy'] = true;
      };
    });
    // NOTE 
    // We don't care about result, this is a 'silent' save to remove empty items,
    // but also to ensure the final sorted order is saved to the server
    this._templateService.patchTemplate(this.template).subscribe();
    this._templateService.selectedTemplate = null;
  } 
Run Code Online (Sandbox Code Playgroud)

我知道不建议进行同步调用,因为它会阻塞 UI/整个浏览器,这不太好。

我确信有多种方法可以解决这个问题,但真的不知道哪种方法最好(特别是因为 Angular 不支持同步请求,所以我必须回退到标准 ajax 来做到这一点)。

我确实想到的一个想法是 ngOnDestroy 可以将“标记”传递给 API,然后它可以将该对象标记为“正在处理”。当列表组件执行调用时,它可以检查每个对象以查看它是否具有该标记,并为处于该状态的任何对象显示“刷新陈旧数据”按钮(无论如何,99% 的时间都只是单个项目,用户编辑的最新一篇)。与仅将异步调用更改为同步调用相比,这似乎是一种糟糕的解决方法,并且需要大量额外的代码。

其他人一定也遇到过类似的问题,但除了这个同步问题 …

javascript settimeout rxjs angular

5
推荐指数
1
解决办法
6656
查看次数

标签 统计

angular ×1

javascript ×1

rxjs ×1

settimeout ×1