Добрый день, подскажите, пожалуйста в чем принципиальная разница между
.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 выполнится последним
Представьте, что вместо консольлога вы передаете функцию fn
Теперь, смотрите: 1 .then(fn()) 2 .then(()=>{fn()})
Понятна ошибка? В первом случае нужно было передать указатель на функцию, а мы её сразу вызвали fn(), правильнее было так: .then(fn)
То же самое происходит и с консольлогом.
Всё верно. Во втором случае тоже функцию не вызываем, а только определяем, хоть и безымянный но указатель на функцию передается в then, а он уже вызывает её в момент резолва.
В том что первый не работает как ожидается, а второй работает.
Если писать так: .then(console.log("promise then"))
То "promise then" будет выведено сразу же, не дожидаясь завершения промиса.