项目场景:
问题:在使用element-plus的el-tree树结构的懒加载。
问题描述
在el-tree中的懒加载loadNode 函数加载数据出现覆盖情况
项目中数据代码:
const loadNode = (node, resolve) => {
if (node.level === 0) {
store.commit("SET_USER", {
...store.getters.user,
deptName: "清眸物联",
isChannal: true,
});
return resolve([store.getters.user]);
}
node.data.deptId &&
sGetDeptById(node.data.deptId)
.then(({ code, data }) => {
if (code === 200 && data.length) {
data.map((d) => {
d.isChannal = true;
});
return resolve(data);
// getVideoListByDeptId(node.data.deptId)
// .then(({ code: code2, data: data2 }) => {
// data2.map((d) => {
// d.isCamera = true;
// });
// if (code2 === 200) {
// console.log(...data, ...data2);
// return resolve([...data, ...data2]);
// } else {
// return resolve(data);
// }
// })
// .catch((err) => {
// return resolve(data);
// });
} else {
resolve([]);
}
})
.catch((err) => {
resolve([]);
});
node.data.deptId && getVideoList(node.data.deptId, resolve);
};
function getVideoList(id, resolve) {
getVideoListByDeptId(id)
.then(({ code, data }) => {
data.map((d) => {
d.isCamera = true;
});
if (code === 200) {
return resolve(data);
} else {
return resolve([]);
}
})
.catch((err) => {
return resolve([]);
});
}
原因分析:
loadNode函数如果内部调用二次resolve,最后一次会覆盖上一次数据
解决方案:
把二次请求的数据合并在一块然后调用一次resolve就能避免覆盖
const loadNode = (node, resolve) => {
if (node.level === 0) {
store.commit("SET_USER", {
...store.getters.user,
deptName: "清眸物联",
isChannal: true,
});
return resolve([store.getters.user]);
}
node.data.deptId &&
sGetDeptById(node.data.deptId)
.then(({ code, data }) => {
if (code === 200 && data.length) {
data.map((d) => {
d.isChannal = true;
});
getVideoListByDeptId(node.data.deptId)
.then(({ code: code2, data: data2 }) => {
data2.map((d) => {
d.isCamera = true;
});
if (code2 === 200) {
console.log(...data, ...data2);
return resolve([...data, ...data2]);
} else {
return resolve(data);
}
})
.catch((err) => {
return resolve(data);
});
} else {
resolve([]);
}
})
.catch((err) => {
resolve([]);
});
};