Как правильно вернуть результат из функции async / await? - PullRequest
1 голос
/ 27 апреля 2019

Я работал с асинхронными / ожидающими функциями уже несколько месяцев, и я получил весь свой код на работу, однако, я не понимаю его полностью и могу использовать некоторые мудрые слова.

В моем коде ниже у меня есть асинхронная функция, мой вопрос ... почему он возвращает обещание вместо ожидаемого значения? И что еще более важно, как правильно получить желаемое значение?

  getName = async () => {
    const request = await fetch(apiUrl)
    const data = await request.json()

    return data.response.name
  }

Я вызываю функцию позже

const name = getName()

Но тогда name - это обещание вместо имени.

Я много раз искал это, и оно никогда не слипается. Я надеюсь использовать свой собственный пример, если кто-то сможет мне это объяснить, поэтому я полностью понимаю, что он, наконец, останется со мной.

РЕДАКТИРОВАТЬ - В ответ на @Paulpro я обновил свой вопрос до ниже ...

При условии, что с асинхронной функцией все в порядке, вопрос заключается в том, как сохранить значение.

const name = getName()

'name' теперь обещание, поэтому я обычно делаю что-то вроде этого ...

getName().then(name => setName(name))

но как мне сделать const name === возвращаемым именем?

1 Ответ

2 голосов
/ 27 апреля 2019

как мне сделать const name === возвращаемым именем?

Используя const name = await getName().

Что означает, что вы должны использовать его внутри async function.

Таким образом, ваш подход с использованием:

getName().then(name => setName(name))

, скорее всего, лучший способ сделать это, но он действительно зависит от остальной части вашего кода.

Я имею в виду, что вы можете сделать это так:

let name;

getName = async () => {
  const request = await fetch(apiUrl)
  const data = await request.json()

  name = data.response.name;
}

Когда (и если) оба ваших асинхронных запроса завершатся, ваша переменная name будет иметь результат.Но нет никаких гарантий относительно сроков этого.В зависимости от приложения, может быть хорошо, если вы инициализируете свою переменную следующим образом:

let name = 'Loading...';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...