Node.js - записан пустой файл, но почему? - PullRequest
2 голосов
/ 20 марта 2012

TL; DR Почему первый файл записан, а остальные файлы пустые?

У меня есть цикл for в Node.js, который зацикливает список массивов файловых строк.Каждая строка представляет отдельный файл в соответствующем каталоге.Массив содержит три значения, которые необходимы для создания трех отдельных файлов.После того, как первый файл создан и записан, второй и третий файлы создаются, но остаются пустыми.Ниже приведена сокращенная версия кода.Любая помощь очень ценится.

for(i in file_tree) {

  fp = fs.createWriteStream(file_tree[i]);

  for(i in data) {
    fp.write(data[i]+'\n', function (err) { if(error) throw err;});
  }

} // end for loop - file_tree

====== РЕШЕНИЕ =====

file_tree = [
    pn+ '/theme/file1',
    pn+ '/theme/file2',
  pn+ '/theme/file3',
];

for(i in file_tree) {

    file_name = file_tree[i];
    fp = fs.createWriteStream(file_name);

    data = [];
    switch(file_name) {
        case pn+ "/theme/file1":
                    --- snip --
            break;

        //
        // ERROR BEGINS HERE : Notice no '/' prefix
        //
        case pn+ "theme/file2":
            --snip--
            break;

        default: show(help);
    }

    for(i in data) {
            fp.write(data[i]+'\n', function(err) { if (err) throw err; });
    }
}

1 Ответ

1 голос
/ 20 марта 2012

data не был правильно инициализирован.Предыдущий код был:

file_tree = [ pn+ '/theme/file1', pn+ '/theme/file2', pn+ '/theme/file3'];
for(i in file_tree) {
    file_name = file_tree[i];
    fp = fs.createWriteStream(file_name);
    data = [];
    switch(file_name) {
    case pn+ "/theme/file1":
        data.push("content-1");
        break;
    case pn+ "theme/file2": // <-- error
        data.push("content-2");
        break;
    default: show(help);
    }
    for(i in data) {
        fp.write(data[i]+'\n', function(err) { if (err) throw err; });
    }
} 

Поскольку в операторе case отсутствовала косая черта, он не совпадал, и поэтому data было пустым.

...