#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));