Как уже указывалось, вы должны передать console.log
как функцию, чтобы она работала в правильном порядке.
Что касается причины, по которой end
отображается первым, это связано с тем, что событие l oop гарантирует, что стек вызовов пуст и все глобальные выполнения завершены, прежде чем оно проверяет очередь микрозадач (иногда называется очередью заданий), где журналы вашей консоли ожидают добавления в стек вызовов.
Речь идет о приоритетах (в порядке убывания приоритета):
- Глобальный поток выполнения
- Очередь микрозадач / заданий
- Очередь задач
start
и end
находятся в глобальном потоке выполнения, поэтому они будут выполняться первыми. Событие l oop добавит журналы Promise 1
и Promise 2
из очереди микро-задач и запустит их после завершения всех глобальных выполнений. Наконец, если очередь микрозадач пуста, событие l oop проверит очередь задач (сюда добавляются такие вещи, как setTimeout
).
Надеюсь, что это поможет.