You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XState调用异步请求时DevExpress加载面板无法显示的问题求助

解决XState状态机中DevExpress加载面板不显示的问题

以下是针对你的问题的排查与修复步骤:


1. 确认动作函数的正确实现

你在状态中引用了showLoadingPanel和hideLoadingPanel动作,但未提供具体实现。必须确保这两个动作正确调用DevExpress加载面板的API:

// 定义状态机动作
const machineActions = {
  showLoadingPanel: () => {
    loadPanel.show();
  },
  hideLoadingPanel: () => {
    loadPanel.hide();
  }
};

// 创建状态机时绑定动作
const transactionMachine = createMachine({
  // ...其他状态配置
  states: {
    gettingTransactions: {
      entry: 'showLoadingPanel',
      exit: 'hideLoadingPanel',
      // ...invoke配置
    }
  }
}, {
  actions: machineActions // 关键:绑定动作到状态机
});

2. 模拟真实异步请求的延迟

当前getTransactions的Promise是立即resolve的,加载面板刚显示就被隐藏,肉眼无法察觉。添加延迟模拟真实请求场景:

function getTransactions(){
    return new Promise((resolve, reject) => {        
        try {                                    
            // 模拟2秒异步请求
            setTimeout(() => resolve(0), 2000);
        } catch (error) { 
            reject('[ErrorCode:-96] Unable to retrieve transactions'); 
        }
    });
}

3. 验证DOM元素与初始化时机

  • 确保页面中存在目标DOM元素:
<!-- 页面必须包含该元素 -->
<div class="loadpanel"></div>
<div id="employee"></div>
  • 确保加载面板初始化代码在DOM加载完成后执行:
document.addEventListener('DOMContentLoaded', () => {
  const loadPanel = $('.loadpanel').dxLoadPanel({
    shadingColor: 'rgba(0,0,0,0.4)',
    position: { of: '#employee' },
    visible: false,
    showIndicator: true,
    showPane: true,
    shading: true,
    hideOnOutsideClick: false
  }).dxLoadPanel('instance');

  // 状态机定义、实例化代码放在此处
});

4. 排查状态转换是否触发

在动作中添加日志,确认状态机是否进入了gettingTransactions状态:

showLoadingPanel: () => {
  console.log('加载面板显示动作触发');
  loadPanel.show();
},
hideLoadingPanel: () => {
  console.log('加载面板隐藏动作触发');
  loadPanel.hide();
}
  • 如果控制台能看到日志,说明状态转换正常,问题出在DevExpress调用逻辑;
  • 如果无日志输出,需要检查状态机的触发条件(比如是否正确发送了进入gettingTransactions状态的事件)。

内容的提问来源于stack exchange,提问作者SoftwareDveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:35:19