Я только начал изучать Node.js и сразу же набрал следующий код:
const fs = require(`fs`);
fs.appendFile(`mynewfile1.txt`, `Hello content!`, err => {
if (err) throw err;
console.log(`Saved!`);
});
fs.rename(`mynewfile1.txt`, `myrenamedfile.txt`, err => {
if (err) throw err;
console.log(`File Renamed!`);
});
Он находится в app.js
& , в этом каталоге нет других файлов перед запуском.
Когда я запускаю его (с помощью команды node app.js
bash), он стабильно выводит:
> File Renamed!
> Saved!
Я понимаю, что обе операции выполняются асинхронно& Я предполагаю, что переименование файла должно быть быстрее, чем создание нового, но fs.rename
должен выдавать, если файл, который мы пытаемся переименовать, не существует и хорошо, он делает, если нет первого оператора. В противном случае он делает вид, что все в порядке.
Я предполагаю, что это происходит потому, что перед выполнением дорогостоящего узла ввода / вывода каким-то образом оценивает операции и, в моем случае, вместо создания нового файла и переименования его, просто создаетфайл с именем myrenamedfile.txt
сразу.
Мои вопросы:
- Я прав в своем последнем предположении? Если да, то не могли бы вы указать на некоторую документацию, касающуюся этого, в противном случае, не могли бы вы объяснить, почему это происходит?
- Не могли бы вы также указать мне правила, которые регулируют поведение
fs.rename
в этом случае? Я имею в виду, что он явно не переименовывает существующий файл (потому что он еще не создан), он должен делать что-то другое. Итак, где находится документация для этого «чего-то другого»? Основная документация не указывает ее.
UPD:
Большое спасибо всем приятным людям, которые ответили до сих пор, я знаю, что либоpromisify
из utils
модуля или экспериментального require('fs').promises
можно использовать для цепочки операций, если это необходимо, но возникает вопрос , почему код работает и не выдает ошибку, а не как операции могут быть связаны друг с другом.