基本的に、各ノードがその親への参照を持つツリーを設定しようとしています。私は次のことを試しました:
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()
}
問題は、一度に 1 つのノードのみを作成し、そのノードの作成が完了するまで待ってから、次のノードに移動する必要があることです。現在の動作方法では、最初のノードが完了する前に新しいノードの作成を開始するため、問題が発生します。いくつかの方法で関数をネストし、Q.fcall() を使用してみました。複数の子ノードに対して返されるID が必要ですasync_create_node
。それ以外の場合は、再帰を使用します。