复制
收藏
提问
简洁

下面代码是否有问题,如何优化 for (let i = 0; i < sortedNodes.length; i++) { const nodeData = sortedNodes[i].getData(); let newData=JSON.parse(JSON.stringify(nodeData)) newData.status='running' sortedNodes[i].setData(newData) setTimeout(()=>{ if (nodeData.label === '傅里叶变换' && nodeData.cypl === '') { newData.status='failed' sortedNodes[i].setData(newData) setNodeAttributes(sortedNodes[i], '#fad5d5', '#faa1a1'); ElMessageBox.confirm( '傅里叶变换参数配置错误,请检查!', '错误', { confirmButtonText: '确定', type: 'error', showCancelButton: false, } ); }else { newData.status='success' sortedNodes[i].setData(newData) setNodeAttributes(sortedNodes[i], '#d0ffe4', '#c0fdb2'); } },1000) }

5c9112620
1个月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些
  • 代码存在回调地狱问题,可优化为使用Promiseasync/await

异步问题优化

  • 避免回调地狱:当前代码中使用了嵌套的setTimeout,形成了回调地狱,难以维护和扩展。18
  • 使用Promise:可以将异步操作封装成Promise,通过链式调用.then().catch()来处理不同情况。7
  • 使用async/await:对于支持async/await的JavaScript环境,可以将异步操作同步化处理,使代码更清晰。9

示例优化

for (let i = 0; i < sortedNodes.length; i++) {
  const nodeData = sortedNodes[i].getData();
  let newData = JSON.parse(JSON.stringify(nodeData));
  newData.status = 'running';
  sortedNodes[i].setData(newData);

  setTimeout(async () => {
    await new Promise(resolve => setTimeout(resolve, 1000)); // 模拟异步操作

    if (nodeData.label === '傅里叶变换' && nodeData.cypl === '') {
      newData.status = 'failed';
      sortedNodes[i].setData(newData);
      setNodeAttributes(sortedNodes[i], '#fad5d5', '#faa1a1');
      ElMessageBox.confirm('傅里叶变换参数配置错误,请检查!', '错误', {
        confirmButtonText: '确定',
        type: 'error',
        showCancelButton: false,
      });
    } else {
      newData.status = 'success';
      sortedNodes[i].setData(newData);
      setNodeAttributes(sortedNodes[i], '#d0ffe4', '#c0fdb2');
    }
  }, 1000);
}
  • 封装异步操作:将setTimeout内的逻辑封装成async函数,使用await来等待异步操作完成,避免回调地狱。9
你觉得结果怎么样?
JavaScript 代码性能优化技巧
如何避免在 JavaScript 中使用 setTimeout 导致的性能问题
JavaScript 异步编程最佳实践
如何使用 Promise 替代 setTimeout
JavaScript 事件循环和微任务队列
如何使用 async/await 改善 JavaScript 异步代码

以上内容由AI搜集生成,仅供参考

在线客服