использовать только в асинхронных функциях? именно спрашиваю зачем так сделали, что мешает использовать await в любом месте программы?
Ты про почему нельзя писать await без ключевого слова async или await вообще без обертки? или и то, и то?
почему нельзя писать await в неасинхронной функции (объявленной без async)
top level await хд
Потому что это неправильно. Так ты говоришь, что в той функции есть асинхронный код и позволяешь другим отреагировать на это(поскольку async возвращает промисс). Возможно, есть ещё более низкоуровневые причины.
Полный ответ на этот вопрос довольно сложный. Если вкратце, то в текущей реализации JS это нужно для работы Event Loop
Синхронная функция имеет право вернуть что угодно (даже промис) Асинхронная функция обязана вернуть промис
то-есть основная суть в том, что я не могу использовать асинхронный код в синхронных функциях? но разве не могу?
пока что моих знаний недостаточно, чтобы это понять, как-нибудь гляну про это
Вся программа на JS синхронная. Но ты ведь можешь в ней использовать асинхронный код 😏
потому что асинхронная функция может "вставать на паузу" пока ждет результат некой асинхронной операции. А обычная функция не предназначена для такого, и асинхронным операциям в ней не место
о, вот это уже логично для меня
Хорошо, это я понял, тогда другой вопрос. Почему вебшторм говорит мне использовать await с любой асинхронной функцией внутри асинхронной функции?
можно больще скрин сделать?
чего конкретно, кода функции?
да, куда эту претензию делает вебшторм
Я кажется понял, он мне предлагает либо дописать await, либо then. Похоже ему просто не нравится, что я никак не обрабатываю, что будет непосредственно после функции
Я слегка не правильно написал. Суть в том, что await всегда тормозит функцию. Теперь представь, что бы было без async ключевого слова. Есть два исхода, либо они убирают этот функционал с постоянным торможением, но тогда await не делает ровным счётом ничего без async. Либо оставляют, но делают этим ещё хуже. Так как человек вызывает с виду обычную синхронную функцию, не делает никаких ожиданий, а она ему по какой то причине тормозит всё. Не стоит сравнивать await и промисы. Промисы ты можешь спокойно обрабатывать через next. в то время как await без async теряет весь функционал.
спасибо большое, теперь я хотя бы примерно понимаю, зачем оно так сделано
Обсуждают сегодня