遍历javascript承诺树

时间:2017-10-21 12:36:21

标签: javascript promise

我是javascript promises的新手,并试图解决后续问题:

有一棵树的节点有这样的结构

node: {id, children:node[]}

通过调用

接收一个节点
getNode(id)

其中getNode返回javascript承诺

所以我通过

得到一个节点对象
getNode(id).then(function(node) {
   id = node.id;
   children = node.children;

})

现在我想把整个树放在像

这样的对象中
treeObject = getTree(rootNodeId)

所以最后treeObjects的内容应该是例如

 {1,children:
         [{2,children
              [{5,null},{6,null},{7,null]},
           {3,children[{8,null},{9,null]}...

??? 谢谢你的回答!

1 个答案:

答案 0 :(得分:3)

async function getTree ( id ){
  const node = await getNode(id);
  node.children = await Promise.all( node.children.map(getTree));
  return node;
}

或没有异步等待:

 function getTree ( id ){
  return getNode(id).then(function(node){
   return Promise.all( node.children.map(getTree)).then(function(children){
      node.children = children;
      return node;
   });
 });
}

假设 children 是id列表