Разница между readFileSync и использованием promisify поверх readFile с помощью async / await - PullRequest
0 голосов
/ 11 декабря 2018

Из любопытства я хочу знать, есть ли какая-либо разница между ними.

readFileSync:

function parseFile(filePath) {
  let data = fs.readFileSync(filePath);
}

readFile с обещанием:

const readFilePromise = promisify(fs.readFile);
async function parseFile(filePath) {
  let data = await readFilePromise(filePath);
}

Если вам нужен какой-то контекст, я пытаюсь прочитать кучу файлов в папке, заменить множество значений в каждом и записать его снова.

Я не знаю, есть ли разница в использовании асинхронного или синхронного кода для этих действий.

Полный код:

function parseFile(filePath) {
  let data = fs.readFileSync(filePath);
  let originalData = data.toString();
  let newData = replaceAll(originalData);

  return fs.writeFileSync(filePath, newData);
}

function readFiles(dirPath) {
  let dir = path.join(__dirname, dirPath);
  let files = fs.readdirSync(dir); // gives all the files
  files.map(file => parseFile(path.join(dir, file)));
}

function replaceAll(text) {
  text = text.replace(/a/g, 'b');
  return text;
}

readFiles('/files');

1 Ответ

0 голосов
/ 11 декабря 2018

Существует большая разница между асинхронным и синхронным кодом.Имеет ли значение это различие, зависит от того, что вы пытаетесь сделать.Ваш javascript является однопоточным, поэтому, когда вы читаете потенциально большой файл синхронно с fs.readFileSync, вы не можете ничего делать, например отвечать на входящие запросы.

Если вы используете занятый сервер, это может вызвать большие проблемы, потому что запросы помещаются в очередь, пока вы читаете файл, и вы можете никогда не догнать.

При асинхронном методе чтение файла происходит снаруживаш код, и он вызывает ваш код обратно, когда это будет сделано.Пока он делает это, ваш код может свободно отвечать на другие запросы.

Если вы просто пытаетесь прочитать локальный файл и не имеет значения, блокируется ли поток, то вы можете использовать любой из них.

...