не так. там отрабатывает "цикл" по юзерам и для каждого юзера еще и 100 сообщений отсылается. если 10 юзеров по 100 - это уже 1000 сообщений. потом когда стек вызовов пустеет коллбеки от этих сообщений обрабатываются по порядку (а в нашем случае их 1000). естественно код не реагирует - он обрабатывает сотни а может и тысячи коллбеков по порядку
call stack - это несколько другое
Выглядит будто по сообщению для юзера и ещё 100 сообщений непонятно куда.
Так в случае с асинхронным кодом стек вызовов практически пустой, разве что обёртка send криво написана.
у него все синхронно в том то и дело. он быстренько сбегал в 10 банков и по 100 паспортам в каждом банке взял по кредиту.,а потом когда он закончил все банки оббегать они ему предьявили платеж по всем кредитам
Ты уверен что там цикл в цикле?
да. users.map - условно один цикл, и для каждого юзера еще внутри while - другой цикл
Странно, в упор не вижу. Вижу два не связанных друг с другом цикла без вложенности. Что то со мной не так сегодня.
нет. это я неправильно увидил. :)
в случае с синхронным кодом стек тоже не "забьется" и не переполнится (разве что send этого не делает, что вряд ли)
но все равно когда стек опустеет все колбеки от send выполняются же по-порядку. я правильно понял?
в том примере только колбеки для обработки ошибок. Если говорить о них, то выполнятся они не по порядку конечно же.
разве это не тоже самое что и в этом фрагменте из видео? https://youtu.be/bUx8wk4LdoY?t=1848
что "то же самое"? рекурсивный вызов?
нет. то что выполняются все микротаски которые есть в очереди до конца
если честно, то я плохо разбираюсь в том, что под капотом, но при вызове асинхронных функций в цикле не гарантируется, что колбеки будут вызваны в том же порядке. Иначе зачем тогда придумали await внутри for?
правильно. только await внутри for не то чтобы придумали. просто так как for работает по итерационному протоколу, то в теле цикла можно ждать исполнения промиса.
а C-for и while по какому протоколу работают?
нет протокола там. просто циклы.
Обсуждают сегодня