Следует решить использовать функцию async
ТОЛЬКО на основе того, что происходит внутри этой функции, а не от того, кто ее вызывает. Вызывающая сторона не влияет на то, должна ли функция быть async
или нет.
Причины сделать функцию async
:
- В функции есть асинхронные операции на основе обещаний внутри функции и вы sh будете использовать
await
. - У вас есть асинхронные операции на основе обещаний внутри функции, и вы sh воспользуетесь автоматическим c перехватом синхронных исключений (и преобразованием) к отклоненному обещанию), которое может произойти до того, как вы вызовете свои асинхронные операции.
И это в значительной степени объясняется причинами использования ключевого слова async
перед функцией.
То, что функция async
НЕ является (или распространенное заблуждение относительно функций async
):
- Магическим образом код блокировки не становится неблокирующим.
- Это не заставляет звонящего работать быстрее.
- Это не заставляет синхронный код теперь работать в фоновом режиме асинхронно.
Asyn c - лучший способ T o использовать системные ресурсы,
Не уверен, что вы там имеете в виду. Асинхронные функции позволяют запускать операции неблокирующим образом, чтобы основной поток в Javascript мог выполнять другие действия во время выполнения асинхронной операции, но это не то, что разрешает функция async
. Это включается асинхронной операцией. Они разные.
Если я уже нахожусь внутри функции asyn c и все равно жду каждого вызова, тогда не должно быть никакой разницы между этим и просто использованием синхронных вызовов, верно?
Неправильно. Использование await
с функцией, которая возвращает обещание, приостанавливает выполнение текущей функции (немедленно возвращает обещание), но это позволяет основному потоку Javascript выполнять другие действия, обслуживать другие запросы и т. Д. c ... Использование синхронного кода блокировало бы и не позволяло бы основному потоку делать другие вещи, тем самым разрушая масштабируемость сервера.
Мне это только кажется встроенным оператором ожидания.
Блокировка, синхронный код влияет на все остальное, что может быть запущено во время вашей работы. Это не то же самое, что использование await
.