@ASDF13

В чём разница в работе .then() у двух промисов?

Добрый день, подскажите, пожалуйста в чем принципиальная разница между

.then(console.log("promise then"))

и

.then(()=>{console.log("promise then")}) ?

Почему второй вариант выполняется асинхронно, а первый - синхронно? Читаю описание .then() на MDN указывается, что он выполняет переданную функцию асинхронно (ставит в очередь). Но, получается, что если в качестве такой функции просто передать console.log() то она выполняется синхронно.
Если же завернуть ее в функцию (причем даже без параметров), то выполнение уже становится асинхронным?

console.log() Принципиально отличается от функции вида ()=> {} ?

пример:

myPromise = new Promise((resolve,reject)=> {

resolve(console.log("i run synchronously"));// 1

}).then(console.log("promise then")); //2

console.log("end"); //3

и:

myPromise = new Promise((resolve,reject)=> {

resolve(console.log("i run synchronously"));// 1

}).then(()=>{console.log("promise then")});// 3 выполнится последним

console.log("end");//2
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
GlazOtca
@GlazOtca
Не в бровь, а в глаз!
Представьте, что вместо консольлога вы передаете функцию fn
Теперь, смотрите:
1
.then(fn())
2
.then(()=>{fn()})
Понятна ошибка? В первом случае нужно было передать указатель на функцию, а мы её сразу вызвали fn(), правильнее было так:
.then(fn)
То же самое происходит и с консольлогом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Lynn
@Lynn
nginx, js, css
Во всём. В первом случае вы передаёте не функцию, а результат выполнения функции console.log(…), т.е. undefined.
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
В том что первый не работает как ожидается, а второй работает.
Если писать так:
.then(console.log("promise then"))
То "promise then" будет выведено сразу же, не дожидаясь завершения промиса.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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