私はjavascriptを初めて使用し、非同期の側面やクロージャーなどに実際には対応できません。これについて数日間調査し、多くの試行錯誤を繰り返しましたが、次の問題を解決できないようです:
ツリー構造をたどって、すべての最下位ノード (子ノードのないノード) を収集しようとしています。このノード データはグローバル配列にロードされます (最適ではありませんが必要です)。私が使用している walk 関数は再帰的です。しかし、非同期の性質により、再帰呼び出しが戻る前に関数への最初の呼び出しが返されるため、ツリー全体が調査されません。ツリー全体をトラバースするように見える匿名関数に入れてみましたが、グローバル配列がロードされていません(アクセスできませんか?)。
ところで、実際のコードは別の分離されたネットワーク上にあるため、ここに直接カット アンド ペーストすることはできません。以下は、関連する部分と機能的に同等です(タイプミスがない限り)。申し訳ありません。どんな助けでも大歓迎です。
var nodeList = new Array(); // global variable
function someFunction(rootNode) {
// unrelated processing here
walkTree(rootNode); // gather the childless nodes
return;
}
function walkTree(node) {
return function() { // required in order traverse the entire tree
// but with it, nodeList does not get populated
var num = node.numChildren();
var childNodes = node.getChildNodes();
for (var i=0; i<num; i++) {
var currentNode = childNodes.item(i);
if (currentNode.numChildren() > 0) {
walkTree(currentNode);
}
else {
var obj = new Object();
/// extract certain attributes of current node here
/// and make a variant
nodeList[nodeList.length] = obj;
}
} // END for
} // close anonymous function
} // END FUNCTION