2015-01-06 3 views
1

Я довольно новичок в узле ... Мне нужно забивать асинхронное поведение узла и структуру обратного вызова в моем сознании. Здесь, где я сейчас боюсь:Узел: Перемещение каталогов в рекурсии

// REQUIRE -------------------------------------------------------------------- 
    fs  = require('fs'); 
    path = require('path'); 

    // FUNCTION readAllDirs ------------------------------------------------------- 
    function readAllDirs(dir, result) { 
     if (!result) { 
      result = function() {}; 
     }; 

     fs.readdir(dir, function(err, list) { 
      if(err) { return result(err) }; 

      list.forEach(function(file) { 
        var fullpath = path.resolve(dir, file); 

        fs.stat(fullpath, function(err, stat) { 
          if(err) { return result(err) }; 

          if(stat && stat.isDirectory()) { 
            readAllDirs(fullpath); 
            //console.log('In: ' + fullpath); 
            result(null, fullpath); 
          } 
        }); 
      }); 
     }); 
    } 

    // MAIN ----------------------------------------------------------------------- 
    readAllDirs('/somedir', function(err, dirs) { 
      console.log(dirs); 
    }); 

Я пытаюсь пройти дерево каталогов. В принципе функция работает хорошо ... так как долго я не вызываю, но печатаю имена каталогов на консоли. Все папки и подпапки выглядят как ожидалось. НО, когда я выполняю обратные вызовы, обратный вызов не вызывается для рекурсии глубже первого уровня.

Pleeeaaassee help! Спасибо, парни!

+0

Благодаря Альнитаку. Думая об этом, я сейчас совершенно ясно. Функция обратного вызова (в примере выше функции с console.log ...) должна быть предоставлена ​​для каждого вызова функции readAllDirs. Я не делал этого внутри самой функции readAllDirs. Таким образом, не была определена функция обратного вызова и не console.log .... – user4423309

ответ

1

Ваша проблема здесь, внутри if (stat ...) ветви:

readAllDirs(fullpath); 

Вам необходимо пройти прилагаемый обратный вызов снова обратно в рекурсию:

readAllDirs(fullpath, result); 
+0

Это сделало работу! Спасибо огромное! – user4423309

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