@whatThat

Fs.writeFile в цикле for — запись файлов по одному на каждой итерации цикла?

Пытаюсь реализовать запись файлов по одному на каждой итерации цикла, но файлы записываются все сразу на первой же итерации, при этом код в цикле продолжает правильно отрабатываться. Как решить эту проблему?
var iterations = n;	
for (var i = 0; i < iterations; i++) {
		jsonData = JSON.stringify(obj[i], null, 2); 
		fs.writeFile("data"+i+".txt", jsonData, function(err) { if (err) { console.log(err);} });
                // More code
}
  • Вопрос задан
  • 474 просмотра
Решения вопроса 1
0xD34F
@0xD34F
файлы записываются все сразу на первой же итерации

Что неудивительно, ведь fs.writeFile - асинхронная функция. Используйте синхронную, или можете написать обёртку, возвращающую Promise, либо самостоятельно:

const writeFile = (name, data) => new Promise((resolve, reject) => {
  fs.writeFile(name, data, function(err) {
    if (err) {
      reject(err);
    } else {
      resolve();
    }
  });
});

Либо с использованием util.promisify:

const writeFile = require('util').promisify(fs.writeFile);

И использовать её вместе с await'ом:

for (let i = 0; i < iterations; i++) {
  await writeFile(`data${i}.txt`, JSON.stringify(obj[i], null, 2));
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
svistiboshka
@svistiboshka
живые веб интерфейсы
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы