1. Какие API создают microtask, а какие macrotask?
Microtask — это задачи с более высоким приоритетом, которые выполняются сразу после текущего стека вызовов. Macrotask — задачи с обычным приоритетом, которые обрабатываются по очереди между рендерами. Promise и queueMicrotask создают microtask, а setTimeout и события DOM — macrotask. Разница влияет на порядок выполнения и рендер.2. Что такое race condition при запросах?
Race condition — это ситуация, когда несколько запросов выполняются параллельно, и результат более медленного запроса перезаписывает результат более быстрого. В итоге состояние приложения может оказаться некорректным. Это часто происходит при быстрых изменениях параметров запроса. Проблема связана не со скоростью сети, а с порядком завершения запросов.
3. Как реализовать аналог Promise.all вручную?
Аналог
Promise.all можно реализовать, создав новый Promise и вручную отслеживая выполнение всех переданных Promise. Нужно сохранить результаты в массив в правильном порядке и считать количество завершённых операций. Если хотя бы один Promise отклоняется, итоговый Promise должен сразу перейти в состояние rejected. Это демонстрирует понимание базовой модели Promise.4. Может ли микрозадача заблокировать рендер браузера?
Да, микрозадачи могут заблокировать рендер браузера. Браузер выполняет все microtask перед тем, как перейти к рендеру. Если microtask постоянно добавляют новые microtask, рендер откладывается. Это состояние называется starvation.
5. Как возникает race condition в React?
Race condition в React возникает, когда несколько асинхронных запросов выполняются параллельно и обновляют одно и то же состояние. React не знает, какой запрос является “последним” или актуальным. В результате более старый запрос может завершиться позже и перезаписать более свежие данные. Это приводит к отображению устаревшей информации в UI.
#event #loop #microtask #race #condition #promise #all #render