Будут ли остановлены следующие строки кода до завершения fs.writeFileSync (путь, данные)?
Да.Это операция блокировки.Обратите внимание, что вы предполагаете, что fs.writeFileSync
заканчивается .
Остановлены ли предыдущие асинхронные процессы этой строкой кода?
Вроде.Поскольку JavaScript является однопоточным, он также не будет работать во время записи файла, но будет поставлен в очередь на следующем такте цикла событий.
Если другие асинхронные процессы не затронуты, как writeFileSyncотличается от writeFile?
Он блокирует любой код, который идет после него.Для более простого примера рассмотрим следующее:
setTimeout(() => console.log('3'), 5);
console.log('1'); // fs.writeFileSync
console.log('2');
против
setTimeout(() => console.log('3'), 5);
setTimeout(() => console.log('1'), 0); // fs.writeFile
console.log('2');
Первый выводит 1 2 3, потому что вызов console.log
блокирует последующее.Второй выводит 2 1 3, потому что setTimeout не блокирует.Код, который печатает 3, никоим образом не затронут: 3 всегда будет последним.
Есть ли в writeFileSync функция обратного вызова, которую я неправильно понимаю?
Не 'я знаюВы не опубликовали достаточно кода, чтобы мы могли сказать.
Все это заставляет задуматься о том, почему предпочтительнее fs.writeFile
, чем альтернативе.Ответ таков:
Версия синхронизации блокирует .
Хотя это занимает много времени, например, ваш веб-сервер не обрабатывает запросы.