@FlyMoBiS

Почему then cрабатывает после того как Promise.resolve был вызван?

const a = new Promise((r) => {r()});
    setTimeout(() => {a.then(() => { console.log('работает') })}, 0(можете поставить сколько угодно, разрешаю));

output: работает javascript:2

возможно если нет функции resolve то промис просто не работает?
или как?
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Попробую аналогию.

Промис (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...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Промис так работает, потому что его так задумали. Ну или, например, потому что мир так устроен.

then - это не "подписка на изменение состояния промиса", а создание нового промиса. Так что функция в любом случае должна быть вызвана, чтобы вычислить новое значение. Даже если промис давно не pending.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы