@Zashamee

Понимает ли js, что функция вернет promise?

Есть такая функция…
const getData = () => {
  fetch(“адресДаты”).then((resp) => {
 resp.json()
})
.then((data) => {
 return data.data
})
}

В общем узнал, что js однопоточный и есть такая шиука как event loop. И собственно возник вопрос. Как в js будет обрабатываться данная функция - по порядку и пока движок не выполнит запрос (а он может занять некоторое время), после чего перейдет к другой функции? Или поймет что это асинхрон и будет выполнять ее в процессе?
Или я вообще не правильно понимаю как это работает js?)
  • Вопрос задан
  • 483 просмотра
Пригласить эксперта
Ответы на вопрос 3
@paroletatel
Отвечу так, как сам понимаю, без претензий на экспертство.

Сама функция в вашем примере — синхронная. Внутри данной функции вызывается fetch — он асинхронный.

Вызов функции и её выполнение — это блокирующий код, он выполняется синхронно, и останавливает поток, пока не отработает функция.

Но суть в том, что идея отрабатывания данной синхронной функции в том, чтобы поместить в event loop асинхронный запрос (который возвращает promise), обработчик которого запускается и не блокирует основной поток, — и только. Сама функция же, как синхронная, возвращает то, что вы ей даете вернуть, — в данном случае undefined.

Если бы вы записали функцию, как асинхронную, и перед fetch использовали await, то данная функция как раз и возвращала promise, который предполагал бы полное исполнение fetch до выполнения самой функции, то есть resolve'а promise функции.

const getData = async () => {
  await fetch('адресДаты').then((resp) => {
    resp.json()
  })
  .then((data) => {
    return data.data
  })
}
Ответ написан
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
fetch встанет в очередь макро задач после вызова функции, then в очередь микро задач после того, как будет получен ответ в fetch.
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
верните сам промис

const getData = () => {
  return fetch('адресДаты').then((resp) => {
    resp.json()
  })
  .then((data) => {
    return data.data
  })
}

getData.then(d => console.log(d));
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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