复制
收藏
提问
简洁
下面代码是否有问题,如何优化 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) }
1个月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
- 代码存在回调地狱问题,可优化为使用
Promise
或async/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
你觉得结果怎么样?