Это проще проиллюстрировать на примерах.Ваш первый случай:
const fn = (text) => {console.log(text)}
const waiter = () => new Promise((resolve, reject) => {
return setTimeout(() => {
fn('resolved')
resolve()
}, 2000)
})
waiter().then(fn('done'))
Обратите внимание, что fn
сначала выполняется, оценивается, а затем выполняется waiter
.
Давайте рассмотрим 2-й случай:
const fn = (text) => {console.log(text)}
const waiter = () => new Promise((resolve, reject) => {
return setTimeout(() => {
fn('resolved')
resolve()
}, 2000)
})
waiter().then(() => fn('done'))
Обратите внимание, что теперь мы получили resolved
, а затем done
.
Итак, ответ на ваш вопрос: да, в обоих случаях мы будем ждать и выполнять someFunc
или в приведенном выше примере waiter
.
ОсновнойРазница действительно в том, когда ваш dosomethingafter
исполняется.
В первом случае это сразу, а затем оно передается в waiter
.
Во втором случае у вас есть действующая цепочка обещаний, которая сначала будет выполнена, а затем однажды выполнена (а поскольку fn
действует как обработчик функции then
), она выполнит dosomethingafter
.