Недолюбливаю 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. Ты не можешь в случайном месте вызвать асинхронную функцию. Это однозначно благо. Всё видно, всё понятно, есть правила. Да, это строже, да, есть ограничения. Но и забористый говнокод таким образом написать гораздо сложнее.`

Недолюбливаю JavaScript. Уникальный язык, в котором смогли сделать плохо практически всё. Одни только типы и их сравнения чего стоят ([] == ![] — ну вы поняли) | Сетка — новая социальная сеть от hh.ru
repost

12

input message

напишите коммент

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь