基本上,我正在尝试建立一棵树,其中每个节点都有对其父节点的引用。我尝试了以下方法:
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()
}
问题是我需要它一次只创建一个节点,然后等到该节点创建完成,然后才能继续下一个节点。它现在的工作方式是在第一个节点完成之前开始创建一个新节点,这会导致问题。我尝试过以多种方式嵌套函数,并使用 Q.fcall()。我需要为多个子节点返回的 id async_create_node
,否则我只会使用递归。