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

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

На сайте HABR обычно обсуждаются различные технические вопросы, в том числе и по теме JavaScript и промисов. Возможно, на HABR был поднят подобный вопрос или приведен пример, связанный с тем, как работают промисы и метод `then` в JavaScript.
Попробую аналогию. <br/> <br/> Промис (P) это магазин. then это клиенты-покупатели. <br/> <br/> 7 утра. Магазин ещё закрыт (промис в состоянии pending), но первые покупатели уже пришли и стоят у дверей. <br/> (P.then(func1), P.then(func2), …) <br/> <br/> 8 утра. Всё ещё закрыт, приходят ещё покупатели <br/> (P.then(func100), P.then(func101),…) <br/> <br/> 9 утра. Магазин наконец открылся (промис перешёл в состояние fullfilled) и все покупатели зашли и чего-то купили <br/> (Выполнились func1, func2, ..., func100, func101, ...) <br/> <br/> 10 утра. Приходит покупатель, магазин уже открыт, так что он сразу покупает что ему нужно <br/> (P.then(func200) и сразу (вернее на следующем цикле микрозадач) выполняется func200) <br/> <br/> и далее весь день. <br/> <br/> Но в отличии от реального магазина, промис уже никогда не закроется после открытия. <br/> <br/> Ссылки для чтения <br/> <a href="https://doka.guide/js/promise/" rel="nofollow">https://doka.guide/js/promise/</a> <br/> <a href="https://learn.javascript.ru/promise-basics" rel="nofollow">https://learn.javascript.ru/promise-basics</a> <br/> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/JavaS...</a>
Похожие вопросы