如何在使用ngOnDestroy函数调用时等待api调用完成?

问题描述:

我有一个场景,我必须在特定组件销毁之前将数据发送到api(数据库)。正如其在angular2生命周期中描述的那样,在组件被销毁之前执行一种方法,并且其被称为ngOnDestroy。但是如文档中所指定的那样,这是一个无效函数,因此它不会等待某些结果返回。如何在使用ngOnDestroy函数调用时等待api调用完成?

我的问题是我如何执行我在ngOnDestroy函数中的api调用并等待它完成时?

如果我只是调用更新函数它可以工作,但是当我从一个组件到另一个组件路由时,第一个组件的数据还没有更新,而下一个组件加载旧数据(如果我刷新然后我得到新的数据)。所以,问题是,我不能等待更新功能完全执行,然后让组件的破坏和路由到下一个组件,它会加载正确的,更新的数据:

updateData(data: any, callback?: Function) { 
    this.apiService.update(data).then(response => { 
     callback(response); 
    } 
} 

ngOnDestroy() { 
    this.updateData(this.data); 
} 

// Maybe i could somehow use callback functionality to postpone execution of ngOnDestroy function 
ngOnDestroy() { 
    this.updateData(this.data, response => { 

    }); 
} 

或有任何其他的方式来解决这种情况呢?

而不是做这样的事情尝试这种方法更干净,更好,我猜。

利用共享服务,将r值传递给Destroy上的共享服务,然后导航到第二个组件。有一个路由器解决方案,可以确保在组件加载时填充数据并保存在您的处理中。

对于共享服务检查此LINK - 问题2和路由器解决LINK

您还可以伸手的终极版或NGRX areif你想更好的可读性LINK

+0

所以我应该做一个服务,而我改变某个过程正在工作的背景和回调我更改了服务的状态的状态(从工作=真到工作=假,并发出完成的事件)。然后在新路线中,我检查工作值是否为真,然后订阅事件以在完成时通知我。然后我可以向API发出新请求,其中将包含新数据。因为我可以从组件A到组件B内部的应用程序,它应该在路由之前将数据保存到数据库,因为我也可以直接访问组件B. – BoonZ