Порядок выполнения в цикле событий

#javascript

Вопрос:

почему setTimeout(обратный вызов), Promise.resolve().затем(обратный вызов) и requestAnimationFrame(обратный вызов) имеют разный приоритет для выполнения? Ниже приведен пример кода:

 setTimeout(()=gt;console.log(1)); Promise.resolve(2).then(console.log); requestAnimationFrame(()=gt;console.log(3)); console.log(4); window.onclick = ()=gt;console.log(5); window.dispatchEvent(new Event('click')); 

Комментарии:

1. каково ваше ожидаемое поведение?

2. Что я знаю только то, что в этом случае setTimeout выполняется после обратного вызова. И синхронный код выполняется до обратного вызова.

3. » почему у них другой приоритет для выполнения? «- потому что обещания важнее анимации, важнее тайм-аутов? Не уверен, что именно вы хотите знать.

4. Я хочу знать, как они работают в цикле evet. Не только принципы дизайна.

5. @young-trigold Что вы уже знаете о цикле событий?

Ответ №1:

синхронизация

 console.log(4);  window.onclick = ()=gt;console.log(5);  window.dispatchEvent(new Event('click'));  

Микрозадачи

 Promise.resolve(2).then(console.log);  requestAnimationFrame(()=gt;console.log(3));  

Макрозадача

 setTimeout(()=gt;console.log(1));