Помогите в понимании асинхронных функций в js. Я накидал простенький пример в котором по непонятной мне причине async функции внутри которых loop с разным количеством итераций выполняются одновременно, а не по порядку (сначала там где итераций меньше, после там где больше).
Пример кода.
Для примера вот тот же самый код но реализованный через задержку используя setTimeout, который работает правильно -
https://jsfiddle.net/jrk7p3tx/Оставлю это объяснение будущему себе:
Любая функция вызванная в основном потоке, будь то синхронная или возвращающая промис, будет этот самый поток блокировать до окончания её выполнения. Единственное что доступно разработчику, это возможность зашафлить стек вызова (например обернув в setTimeout) в котором сначала будут выполнены функции из основного потока, а после те которые придут из очереди событий от setTimeout.
В итоге получается что результаты при использования loop'ов "появляются одновременно", потому-что всё это время идёт блокирующая обработка циклов в основном потоке.
Во втором же примере setTimeout откладывает отправку простого объекта (а не исполнение блокирующего кода) плюс таймер крутится не в основном потоке, а в параллельном (webAPI). Что в итоге даёт эффект неблокирующего параллельного поведения.