@FlyMoBiS

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

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

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

возможно если нет функции resolve то промис просто не работает?
или как?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы