Порядок выполнения промисов и setTimeout

Medium
promisesevent-loopasynchronoussetTimeoutmicrotasksmacrotasksTinkoff

В каком порядке отработают логи?

setTimeout(() => console.log('C'), 0);

const promise = new Promise((resolve) => {
    console.log('P');
    resolve();
});

console.log('E');

promise.then(
    () => console.log('M'),
    () => console.log('H')
);
Подсказка

Этот вопрос проверяет понимание event loop: как JavaScript разделяет синхронный код, микротаски (Promise.then) и макротаски (setTimeout). Ожидают, что вы назовёте правильный порядок и объясните почему.

Ваш код - JavaScript
Результаты
Нажмите «Запуск» для выполнения кода