Ich habe einen einfachen Baum mit IDs, die Schlüssel zu einer Mongo-Sammlung sind. Ich verwende eine Knotenbibliothek namens treewalker. Während ich jeden Knoten des Baumes durchlaufe, versuche ich, den Namen nachzuschlagen (mit Mungo) und ihn einfach an den aktuellen Knoten anzuhängen. Wenn ich keinen Rückruf mache, um den Knotennamen zu suchen, und nur einen festen Wert verwende, bekomme ich den Wert, den ich erwarte. Lassen Sie mich in Code veranschaulichen:Ausführen einer Funktion, nachdem ein Baumspaziergang mit Rückrufen abgeschlossen wurde
Hier ist mein Baum:
{
"categoryTree": [
{
"categoryId": "1",
"children": [
{
"categoryId": "2",
"children": [
{
"categoryId": "3",
"children": []
},
{
"categoryId": "4",
"children": []
}
]
},
{
"categoryId": "5",
"children": []
},
{
"categoryId": "6",
"children": []
}
]
},
{
"categoryId": "7",
"children": [
{
"categoryId": "8",
"children": []
}
]
}
]
}
Hier ist der Code, der tut, was ich will:
catTree.categoryTree.forEach(function(node){
var counter = 0;
tree.walkTree(node, 'children', function(obj){
obj.name = counter++;
});
});
//This tree has the names (as the counter above) in it as I expect
console.log(JSON.stringify(catTree));
aber sobald ich in einem Mungo Rückruf werfen Holen Sie sich den Kategorienamen, der Kategorienbaum, der gedruckt wird, hat nicht mehr die Namen.
Ich weiß, dass dies ein Problem des Timings ist, aber ich kann nicht herausfinden, wie man es löst. Ich habe mehrere SO-Artikel like this one gesehen, die Callbacks nachverfolgen und nur fortsetzen, nachdem sie alle aufgerufen wurden. Ich kann nicht herausfinden, wie man dieses Muster auf meinen Fall anwendet, weil ich einen Baum spazieren gehe und nicht nur eine flache Liste wiederhole. Ich beginne zu denken, dass mein Problem möglicherweise, dass ich die Treewalker-Bibliothek verwende, vs nur meinen eigenen Algorithmus mit Callbacks schreiben, nachdem jeder Knoten besucht wird.
Ich schätze Ihre Hilfe wirklich!
siehe async.js – Alex