@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
  • Вопрос задан
  • 97 просмотров
Решения вопроса 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" будет выведено сразу же, не дожидаясь завершения промиса.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 нояб. 2021, в 22:17
1000 руб./в час
30 нояб. 2021, в 21:47
1000 руб./за проект
30 нояб. 2021, в 21:47
1000 руб./за проект