Невозможно установить результат вызова Fetch для переменной, и Обещание не разрешается - PullRequest
2 голосов
/ 28 марта 2020

У меня есть опыт работы с Promises и Fetch в Javascript, но я просто не могу понять это.

Я пытаюсь получить данные с сайта и сохранить часть заголовка, как показано ниже:



async function getData() {

    let response = await fetch("url.....", requestOptions);

    let data = await response.headers.get('set-cookie') 

    return data;
  }

async function main() 
{
    const dataset = await getData();
    console.log(dataset) // This here prints out the data AFTER everything has ran, makes sense as it probably waits for the promise to be resolved.
    data = dataset // This does not set the value of data to dataset. It sets it to Promise <Pending> 
  }

main();


Итак, как мне наконец установить Данные переменной к разрешенному обещанию? Я думал, что await getData () будет ждать разрешения обещания, прежде чем продолжить, что позволит установить фактическое значение данных, а не обещание.

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Вам также нужно await main.

Я предполагаю, что вы делаете что-то вроде этого

main() //call to main
console.log(data) //call to see `global` var data set

Вам нужно сделать что-то подобное

await main()
console.log(data)

Если вы вызываете main с верхнего уровня, вы не сможете добавить await, поэтому вам нужно объявить встроенный метод async и вызвать его.

0 голосов
/ 28 марта 2020

Этот код работает нормально для меня, кажется, проблема с console.log

console.log () asyn c или syn c?

async function getData() {
  let response = await fetch("http://localhost:8080/");
  let data = await response.headers.get('content-length') 
  return data;
}

async function main() 
{
  const dataset = await getData();
  console.log(dataset) // This here prints out the data AFTER everything has ran, makes sense as it probably waits for the promise to be resolved.
  data = dataset // This does not set the value of data to dataset. It sets it to Promise <Pending> 
  console.log(data)
}

main();
...