多叉树异步遍历

有个业务问题,数据结构为树,但是树的子节点需要调接口异步获取,一次只能获取到某个节点下的所有子节点,最终的结构如下,按步骤解析:
1.异步获取到key为abcde这一节点(不包括children)
2.根据key=abcde获取到其子节点children下所有key
3.遍历abcde所有子节点的key异步获取其所有下级节点

const tree = {
  key: 'abcde',
  children: [{
    key: 'defg',
    children: [{
      key: 'fghi'
    }]
  }, {
    key: 'aaccd',
    children: [{
      key: 'dafhi'
    }]
  }]
}

假设获取根节点的异步方法为f1, 根据key获取子节点的异步方法为f2

该如何设计这个过程,tree的生成是获取到数据后逐步填充的过程

阅读 1.4k
2 个回答
const tree = {};

// 获取主节点
f1().then(key => {
  tree.key = key;
  getSubKey(tree);
})

// 递归获取子节点
async function getSubKey(item) {
  const children = await f2(item.key);
  item.children = children;
  children.forEach(child => getSubKey(child));
}
async function getTree() {
    var tree = await f1();
    tree.children = await (async function getChildren(key) {
        var ret = [];
        var keys = await f2(key);
        for (var i = 0; i < keys.length; ++i) {
            var item = { key: keys[i] };
            var children = await getChildren(item.key);
            if (children.length) item.children = children;
            ret.push(item);
        }
        return ret;
    })(tree.key);
    return tree;
}
getTree().then(console.dir);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题