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

时间:2017-09-13 11:32:19

标签: javascript angular lifecycle

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

我的问题是如何在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 => {

    });
}

或者还有其他方法可以解决这种情况吗?

1 个答案:

答案 0 :(得分:2)

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

使用共享服务,将r值传递给Destroy上的共享服务,然后导航到第二个组件。有一个路由器解析,它将确保在加载组件时填充并保留数据。

对于共享服务,请检查此LINK - 问题2以及路由器解析LINK

如果你想要更好的可读性,你也可以联系redux或ngrx LINK