如何将承诺的结果保存到变量?

Joh*_*ohn 4 javascript async-await es6-promise

我需要从 API 获取一些 JSON 数据并将结果分配给一个变量。我可以在控制台中看到数据数组,但 [abc] 始终设置为 Pending 承诺。

我试图分配 [abc] 而不是记录 [data] 或简单地返回 [data] 但它不起作用。理想情况下,我还想停止执行以下代码,直到获得所需的数据,但使用我拥有的代码,文本会在数据之前记录

async function fetchData() 
{
  let response = await fetch('API');
  let data = await response.json();
  data = JSON.stringify(data);
  data = JSON.parse(data);
  return data;
}

let abc = await fetchData()
  .then(data => console.log(data)); 

console.log('This should not be logged if 'abc' does not have the data i need')

Run Code Online (Sandbox Code Playgroud)

(data => console.log(data)) ..>> 这里的数据是我需要的数组,但我不知道如何分配变量。

我在互联网上寻找了许多解决方案,但找不到任何可以提供帮助的方法。

编辑 1:

如果我分配: let abc = await fetchData() 没有 then 语句它会向我抛出这个错误: Uncaught SyntaxError: await is only valid in async function

如果我然后删除 await 关键字,它会返回 Promise 而没有解决它。

hac*_*ape 7

为了使await关键字起作用,它必须位于async函数内部。所以你需要先把你的代码包装在一个异步函数中,假设一个主函数,然后调用它。例子:

async function fetchData() {...}

async function main() {
  let abc = await fetchData();
  console.log(abc);
}

main();
Run Code Online (Sandbox Code Playgroud)


Ami*_*han 6

应该是这样的

async function fetchData(){
 let response = await fetch('API');
 let data = await response.json();
 data = JSON.stringify(data);
 data = JSON.parse(data);
 return data;
}

let abc = await fetchData(); // here the data will be return.
console.log(abc); // you are using async await then no need of .then().
Run Code Online (Sandbox Code Playgroud)