Кисель в Айти | Python разработка
06.05
Недолюбливаю JavaScript. Уникальный язык, в котором смогли сделать плохо практически всё. Одни только типы и их сравнения чего стоят ([] == ![] — ну вы поняли).
Сегодня вот познакомился поближе с его асинхронностью. Проблема была в старом коде: где-то в глубине вызывается API, чтобы обновить объект. Я вызываю обычную функцию UpdateObject — ничего подозрительного. Ни async, ни await. Значит она точно завершится до следующей строки, всё как мы любим. Хаха, наивный питонист. Здесь другие правила.
Оказывается, внутри она делает асинхронный вызов, но снаружи этого не видно. Просто где-то уходит запрос к API — без await, без явных признаков асинхронности. А ты такой вызываешь UpdateObject() и думаешь: ну раз функция обычная, значит всё выполнится до конца. Ан нет.
В данном случае fetch вернёт Promise (аналог нашей футуры) и выполнится когда то потом.
`function updateObject() { fetch("https://jsonplaceholder.typicode.com/todos/1"); console.log("🟢 updateObject завершён"); }
updateObject(); console.log("⏹️ Основной поток завершился");
По итогу получим следующее: 🟢 updateObject завершён ⏹️ Основной поток завершился ✅ fakeApiCall завершён
В Питончике в этом плане всё прозрачнее. Хочешь асинхронщину — пиши async def. Делай await. Ты не можешь в случайном месте вызвать асинхронную функцию. Это однозначно благо. Всё видно, всё понятно, есть правила. Да, это строже, да, есть ограничения. Но и забористый говнокод таким образом написать гораздо сложнее.`
еще контент в этом сообществе
еще контент в этом соообществе
Кисель в Айти | Python разработка
06.05
войдите, чтобы увидеть
и подписаться на интересных профи