如何判断AG Grid服务端行模型的purge清理操作已完成?
解决AG Grid服务端行模型Purge完成的判断方案
核心思路:利用AG Grid内置事件监听
AG Grid服务端行模型执行refreshServerSideStore({ purge: true })后,会触发特定事件标记purge操作(及后续数据加载)的完成,通过监听这些事件可精准判断时机,避免后台进程因节点不存在报错。
方案1:监听serverSideStoreUpdated事件
该事件在服务端存储发生更新时触发,涵盖purge清空完成和新数据加载完成两个阶段。如果需要等待purge完成后恢复后台进程,可通过单次监听实现:
// 注册单次触发的事件回调 const handlePurgeComplete = () => { // 此处恢复后台进程操作,或重新定位新行节点 console.log('Purge操作已完成'); // 移除监听,避免重复触发 gridApi.removeEventListener('serverSideStoreUpdated', handlePurgeComplete); }; // 先绑定事件,再执行purge gridApi.addEventListener('serverSideStoreUpdated', handlePurgeComplete); gridApi.refreshServerSideStore({ purge: true });
方案2:监听rowDataChanged事件
当purge清空现有行数据时,会立即触发rowDataChanged事件,适合仅需判断节点已被清空的场景:
let isPurging = false; const handleRowDataChange = () => { if (isPurging) { // Purge清空完成,执行后续逻辑 isPurging = false; // 恢复后台进程或处理新节点 gridApi.removeEventListener('rowDataChanged', handleRowDataChange); } }; // 标记正在执行purge isPurging = true; gridApi.addEventListener('rowDataChanged', handleRowDataChange); gridApi.refreshServerSideStore({ purge: true });
方案3:结合isLoading状态判断
如果需要等待purge+新数据加载完成的完整流程,可结合gridApi.getServerSideStore().isLoading()方法:
const waitForPurgeAndLoad = async () => { gridApi.refreshServerSideStore({ purge: true }); // 轮询检查加载状态,直到完成 while (gridApi.getServerSideStore().isLoading()) { await new Promise(resolve => setTimeout(resolve, 50)); } // 此时purge和新数据加载均已完成,恢复后台进程 }; // 调用该异步函数 waitForPurgeAndLoad();
注意事项
- 若后台进程是定时任务,建议在调用purge前先暂停任务,等待purge完成后再重启,从根源避免节点不存在的问题。
- 优先使用事件监听方案(方案1/2),轮询方案(方案3)仅作为备选,避免不必要的性能消耗。
内容的提问来源于stack exchange,提问作者Aniket Pawar
相关产品推荐
相关产品推荐

