@Wamsmer

Почему результат промиса не возвращается через return?

Здравствуйте!
Борюсь с промисами, но не могу добиться адекватного результата.
Создаю функцию, которая возвращает новый промис с данными в resolve.
Создаю асинхронную функцию, где с помощью await дожидаюсь этих данных и записываю в переменную.
Если эту переменную выводить с консоль, то она, естественно, выводится, но при попытки её возврата через return - Promise {status: "pending"}

Вот код:
function newPromise () {
  return new Promise ((resolve) => {
    resolve("some result")
  })
}

async function getResult () {
  let str = await newPromise()
  console.log(str) // успешно
  return str
}

let str = getResult()
console.log(str) // Promise {status: "pending"}


Я понимаю, что console.log в функции выполняется после всего остального кода и поэтому результат выводится. Но ведь await по идее должен тормозить выполнение кода в функции до статуса промиса Resolved, соответственно возврат должен происходить уже с данными, но в переменную все равно пишется pending.
С использованием .then тоже не получается присвоить в переменную.
Все примеры в интернете (включая MDN) используют console.log, с которым проблем нет.
Очень прошу объяснить пошагово, почему код не рабочий и как всё-таки получить
Заранее спасибо.
  • Вопрос задан
  • 295 просмотров
Решения вопроса 1
JRK_DV
@JRK_DV
Рецепты https://codepen.io/jrkdv/full/LKLXdq
асинхронная функция не блокирует поток
вы же это по любому уже читали в той же документации.

теперь ещё раз посмотрите, что происходит в этих строках, вызов асинхронной функции:
let str = getResult()
console.log(str) // Promise {status: "pending"}


Но ведь await по идее должен тормозить выполнение кода в функции

Всё верно и тому подтверждение, строка:
console.log(str) // Promise {status: "pending"}
выполняется раньше, чем строка:
console.log(str) // успешно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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