Basically, I'm trying to set up a tree, where each node has a reference to it's parent. I've tried the following:
function insert_node(node_data, parent_id) {
var deferral = Q.defer()
deferral.promise.then(async_create_node(node_data, parent_id))
deferral.promise.then(function(parent_node_id) {
var deferral = Q.defer()
node_data.children.forEach(function(node) {
deferral.promise.then(insert_node(generate_node_data(node), parent_node_id))
}
return deferral.resolve();
}
return deferral.resolve();
}
function insert_all_nodes() {
var deferral = Q.defer();
deferral.promise.then(insert_node(top_node));
deferral.resolve()
}
The issue is that I need it to only create one node at a time, and wait until that node is done being created, and only then move on to the next one. The way it's working now, it will start creating a new node before the first one is finished, which causes problems. I've tried nesting the functions in several ways, and using Q.fcall(). I need the id that async_create_node
returns for multiple child nodes, otherwise I'd just use recursion.