Использование данных Promise из Async Await - PullRequest
0 голосов
/ 01 февраля 2019

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

async function getActors() {
  let payload;
  var response = await fetch("https://ceamovies.azurewebsites.net/api/movies", {
    headers: {
      "Authentication": "******"
    }
  });
  let data = await response.json();
  payload = data
  return payload
}
let actorList = getActors()
console.log(actorList)

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Ожидание верхнего уровня не поддерживается (и по уважительным причинам), и, таким образом, вы не можете перенести свой payload в область действия gloabl.Вам нужно либо использовать обещание, например Vadim H , либо использовать другую функцию aysnc для получения ваших данных:

async function getActors() {
    let payload;
    var response = await fetch("https://ceamovies.azurewebsites.net/api/movies", {
        headers: {
            "Authentication": "******"
        }
    });
    let data = response.json();
    payload = data
    return payload
}

(async () => { // IIFE
  let actorList = await getActors();
  console.log(actorList);
})().catch(e => {
    // Something went wrong - do something
});
0 голосов
/ 01 февраля 2019

Обещание может быть отложено, выполнено или отклонено (см. MDN ).Если вы хотите обрабатывать отклоненные обещания, вы можете использовать try...catch.Например,

async function getActors() {
  try {
    let payload;
    var response = await fetch("https://ceamovies.azurewebsites.net/api/movies", {
        headers: {
            "Authentication": "******"
        }
    });
    let data = await response.json();
    payload = data
    return payload
  } catch(error) {
    // Do something to handle error gracefully
    // and maybe return a meaningful value.
  }
}
let actorList = getActors()
console.log(actorList)

Если вы хотите обработать выполненное обещание, которое возвращает undefined Я предлагаю вам сделать это вне вашей функции async, что-то вроде

let actorList = getActors()
if(typeof actorList !== 'undefined')
    console.log(actorList)
0 голосов
/ 01 февраля 2019

асинхронное ожидание возвращает обещание, и вам нужно получить данные в then методе

async function getActors() {
    let payload;
    var response = await fetch("https://ceamovies.azurewebsites.net/api/movies", {
        headers: {
            "Authentication": "******"
        }
    });
    let data = response.json();
    payload = data
    return payload
}

getActors().then(res => {
    console.log(res)
})

И ваш путь не имеет доступа Cross-Origin Request

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