Если я добавлю require в асинхронную функцию и вызову эту асинхронную функцию, блокирует ли она nodejs?
Да, так и есть. Если модуль, который вы используете для загрузки require()
, еще не кэширован, то он заблокирует интерпретатор для загрузки модуля с диска с использованием синхронного файлового ввода-вывода. Тот факт, что она находится в функции async
, на это ничего не влияет. Функции
async
не изменяют блокировку, синхронные операции в любом случае. Они обеспечивают автоматическую обработку исключений и позволяют использовать await
и всегда возвращают обещание. Они не обладают магическими способностями влиять на синхронные операции внутри функции.
К вашему сведению, почти во всех случаях модули, которые вам понадобятся в вашем коде, должны загружаться при инициализации модуля. Затем на них можно ссылаться позже из другого кода, не блокируя интерпретатор для их загрузки.