2017-01-13 6 views
0

Я пытаюсь просмотреть результаты базы данных из своего родительского идентификатора, эти результаты можно сравнить с деревом с несколькими ветвями на каждом узле, в котором я хочу просмотреть его ветвь на каждую ветку (не уровень по уровню). Вот моя рекурсивная функция:NodeJS: просмотр рекурсивного дерева

(function tail(file, parentID, entryCount) { 
    console.log("TAIL CALLED: ", self); 
    var opts = new Map(); 
    var data = ""; 

    opts["parentID"] = parentID; 
    opts["Key"] = ""; 
    opts["Value"] = ""; 
    opts["RowID"] = ""; 

    self.Read(opts, function (err, rslt) { 

     for (var i = 0; i < rslt.length; ++i) { 

      (function() { 

      data = (rslt[i].Key + (rslt[i].Value != "-" ? rslt[i].Value : "")); 
      data += "\n"; 

      var rowid = rslt[i].rowid; 

      fs.appendFile(file, data, function (err, rslt) { 
       (tail(file, rowid, entryCount)); 
      }); 

      })(); 

     } 
    }) 
    })(file, parentID, entryCount); 

Эта функция дает мне уровень по результату уровня, я думаю, что я могу понять, почему, но не могу видеть (рекурсивный вызов хвоста помещается в стек, а не казнили сразу?) как заставить его работать ...

Я пробовал с fs.appendFileSync() слишком называть хвост под, но та же проблема остается.

ответ

0

использовать appendFileSync вместо appendFile, чтобы гарантировать, что все они написаны на заказ.

fs.appendFileSync(file, data); 
tail(file, rowid, entryCount); 

Ваш код будет отображаться каждый узел на новой линии, которая будет смущать (вы не будете знать, где начало и конец ветви). Если вы хотите показать ветки, начинающиеся с корня и заканчивающиеся на листах на одной строке, вам придется изменить код (вам нужно будет скопировать результат в строку и передать его на вызов tail и распечатать его, только если вы сталкиваетесь с узлом без детей, тогда вы будете печатать новый символ строки '\n').

+0

Цикл for все еще выполнен до рекурсивного вызова хвоста, поэтому у меня все еще есть результат ширины, а не результат deph: s – Robin

0

Существует 2 решения для поиска глубины в NodeJS: один чистый функционал с использованием последовательного обратного вызова, а второй - с использованием async.series для каждой ветви для принудительной последовательной передачи.

Смежные вопросы