element-plus的el-tree懒加载调用二次resolve数据出现异常

项目场景:

问题:在使用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([]);
      });
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值