当前位置: 首页 > 知识库问答 >
问题:

未处理的拒绝(TypeError):无法读取未定义的属性(读取“length”)

颜志业
2023-03-14

为什么children.length导致未处理拒绝(TypeError):无法读取未定义的属性(读取'length'),特别是因为children.length的值已成功地显示在控制台上?

const getParentId = (childId) => {
    var queue = [ds]
    while(queue.length > 0){
      const children = queue[0].children
      queue.push(children)
      console.log("children.length = "+children.length)
      for (let i = 0; i < children.length; i++){
        if (children[i].id === childId) {return queue[0].id}
      }
      queue.shift()
    }
  }

  const addSiblingNodes = async () => {


    const child = [...selectedNodes][0]
    const childId = child.id
    const newNodes = getNewNodes()

    await dsDigger.addSiblings(childId, newNodes);
    setDS({ ...dsDigger.ds });
    
    console.log("the parent of "+childId +" is "+ getParentId(childId))
  };

共有1个答案

步骏
2023-03-14

while循环在queue中的一个条目没有属性之后继续循环--代码实际上将undefined推送到queue上。当它在下一行报告undefined的长度时,它会抛出导致拒绝promise的错误。

如果我错了,请纠正我,但如果说没有数组具有属性,因为只有节点具有属性,这难道不是真的吗?如果确实如此,则错误将在while循环的第二次迭代中出现。

我建议检查getParentID的设计,因为它似乎试图从ds节点开始对最大的子分支进行分支遍历,而且可能应该对所有子分支进行树遍历。

 类似资料: