Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Ngondestory函数中调用时,如何等待api调用完成?_Javascript_Angular_Lifecycle - Fatal编程技术网

Javascript 在Ngondestory函数中调用时,如何等待api调用完成?

Javascript 在Ngondestory函数中调用时,如何等待api调用完成?,javascript,angular,lifecycle,Javascript,Angular,Lifecycle,我有一个场景,在销毁特定组件之前,我必须将数据发送到api(数据库)。正如angular2生命周期中所述,在销毁组件之前执行一种方法,并将其称为ngondestory。但正如文档中指定的,这是一个void函数,所以它不会等待某些结果返回 我的问题是如何在Ngondestory函数中执行对api的调用并等待它完成 如果我只调用update函数,它会工作,但是当我从一个组件路由到另一个组件时,第一个组件的数据还没有更新,而下一个组件加载旧数据(如果我点击refresh,那么我会得到新数据)。所以问题

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

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

如果我只调用update函数,它会工作,但是当我从一个组件路由到另一个组件时,第一个组件的数据还没有更新,而下一个组件加载旧数据(如果我点击refresh,那么我会得到新数据)。所以问题是,我不能等待更新功能完全执行,然后允许组件销毁并路由到下一个组件,该组件将加载正确的更新数据:

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 => {

    });
}

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

我想,不要做这样的事情,而是尝试更干净、更好的方法

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

对于共享服务,请检查此问题-问题2和路由器解决方案


如果您想要更好的可读性,您也可以联系redux或ngrx Are,因此我应该创建一个服务,其中我更改某个进程在后台工作的状态,并在回调中更改服务中的状态(从working=true到working=false,并发出完成的事件)。然后在新的路由中,我检查工作值是否为真,然后订阅一个事件,当它完成时通知我。然后我可以向API发出新的请求,该API将包含新的数据。因为我可以在应用程序中从组件A到组件B,应用程序应该在路由之前将数据保存到数据库,因为我也可以直接访问组件B。