2017-10-21 8 views
0

Je suis nouveau à javascript promesses et a essayé de résoudre le problème après:Traversant javascript promet arbre

Il y a un arbre avec des noeuds qui ont une structure comme celle-

node: {id, children:node[]} 

un noeud est reçu en appelant

getNode(id) 

où GetNode retourne une promesse javascript

si Je reçois un objet nœud par

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

})

Maintenant, je veux obtenir l'arbre entier dans un objet comme

treeObject = getTree(rootNodeId) 

de telle sorte que dans le contenu de fin de treeObjects devrait être par exemple

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

??? merci pour vos réponses!

+1

On dirait que vous avez besoin d'une fonction récursive? – evolutionxbox

+0

Qu'est-ce que les enfants? –

+0

Quel problème rencontrez-vous? – guest271314

Répondre

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

ou sans async attendent:

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

en supposant que enfants une liste des ids

+0

Cela semble être une bonne solution. Malheureusement, mon navigateur ne supporte pas async/await mais seulement Promises. Jusqu'à présent, je n'ai pas réussi à transformer cette solution en version Promise. Peut-être que quelqu'un pourrait aider avec ça? Merci pour les réponses à l'avance! – Wieland

+0

@Wieland Jonas a mis à jour sa réponse avec une version du code qui ne nécessite pas 'async'. – JLRishe

+0

@wieland, jup édité. –