@historydev
Острая аллергия на анимешников

Можно ли по этому примеру сказать что я понял event loop?

MS - микро задачи
MC - макро задачи

function test(num) {
	console.log(`#${num}`);
}

Promise.resolve().then(setTimeout(() => test(4) /* MS1 */, 1000) /* MC5 */); // MC1

setTimeout(() => test(1) /* MS2 */,1000); // MC2
setTimeout(() => test(2) /* MS3 */,0); // MC3
setTimeout(() => test(3) /* MS4 */,2000); // MC4

const p = new Promise(

  (resolve) => { 
    setTimeout(() => resolve() /* MS6 */, 1000); // MC7
  } // MS5
  
); // MC6

p.then(() => test(5) /* MS7 */);

/* Queue

	MC5 => MS1
	MC1 => MC5
  MC2 => MS2
  MC3 => MS3
  MC4 => MS4
  MC6 => MS5 => MC7
  MC7 => MS6 => MS7
  
  
  result: 
  	#2
    #4
    #1
    #5
    #3
  
*/


И ещё, конкретно в этом участке.

Promise.resolve() - это микро задача, порождающая микро задачу, порождающая макро задачу, которая порождает микро задачу или =>
Promise.resolve() - это макро задача, порождающая микро задачу, порождающая макро задачу, которая порождает микро задачу?

Promise.resolve().then(setTimeout(() => test(4) /* MS1 */, 1000) /* MC5 */); // MC1
  • Вопрос задан
  • 400 просмотров
Пригласить эксперта
Ответы на вопрос 1
batowski
@batowski
Я думаю вы слишком усложнили понимание event loop.
Это лишь механизм для управления асинхронным кодом.
Позволяющий отслеживать готовность выполнения кода.

Вот простой пример:

console.log('Start');

// Асинхронная функция, возвращающая промис
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

// Использование промиса с задержкой в 2 секунды
delay(2000)
  .then(() => {
    console.log('Promise resolved');
  });

// Синхронная функция
console.log('End');


Как только функция delay завершит выполнение, она вернет промис с результатом.

Удобство event loop в том, что бы понимать когда код будет закончен, для ваших последующих действий.

С тем какая именно будет логика выполнения вашего кода, ничего общего event loop не имеет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы