遍历javascript承诺树 [英] Traversing javascript promises tree

查看:48
本文介绍了遍历javascript承诺树的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am new to javascript promises and tried to solve the subsequent problem:

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

There is a tree with nodes that have a structure like this

node: {id, children:node[]}

通过调用收到一个节点

getNode(id)

其中getNode返回一个javascript承诺

where getNode returns a javascript promise

所以我得到一个节点对象

so I get one node object by

getNode(id).then(function(node) {
   id = node.id;
   children = node.children;

})

现在我想将整个树放在一个对象中,如

Now I want to get the whole tree in one object like

treeObject = getTree(rootNodeId)

因此,最后treeObjects的内容应为例如

so that in the end contents of treeObjects should be for example

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

???
谢谢你的答案!

??? thanks for any answers!

推荐答案

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列表

这篇关于遍历javascript承诺树的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆