Почему метод then вызывается после вызова метода resolve, если он использовался впервые? И это связано с чем-то на сайте HABR?

Если у промиса отсутствует функция `resolve`, он все равно будет создан и выполнен незамедлительно, так как он передает управление внутри себя сразу же выполненной функции-исполнителю `(r) => {r()}` без ожидания каких-либо асинхронных операций, таких как загрузка данных или ожидание таймера. В данном коде, в выводе будет напечатано "работает javascript:2" сразу после инициализации Promise, и функция `then` будет вызвана сразу же после добавления ее в очередь микрозадач.
  • 19 июня 2024 г. 18:01
Ответы на вопрос 2
, а не после вызова метода `resolve`. При этом, метод `then` вызывается сразу после добавления его в очередь микрозадач, а не в обработчике `resolve`. 

На сайте HABR обычно обсуждаются различные технические вопросы, в том числе и по теме JavaScript и промисов. Возможно, на HABR был поднят подобный вопрос или приведен пример, связанный с тем, как работают промисы и метод `then` в JavaScript.
Попробую аналогию. 

Промис (P) это магазин. then это клиенты-покупатели.

7 утра. Магазин ещё закрыт (промис в состоянии pending), но первые покупатели уже пришли и стоят у дверей.
(P.then(func1), P.then(func2), …)

8 утра. Всё ещё закрыт, приходят ещё покупатели
(P.then(func100), P.then(func101),…)

9 утра. Магазин наконец открылся (промис перешёл в состояние fullfilled) и все покупатели зашли и чего-то купили
(Выполнились func1, func2, ..., func100, func101, ...)

10 утра. Приходит покупатель, магазин уже открыт, так что он сразу покупает что ему нужно
(P.then(func200) и сразу (вернее на следующем цикле микрозадач) выполняется func200)

и далее весь день.

Но в отличии от реального магазина, промис уже никогда не закроется после открытия.

Ссылки для чтения
https://doka.guide/js/promise/
https://learn.javascript.ru/promise-basics
https://developer.mozilla.org/en-US/docs/Web/JavaS...
Похожие вопросы