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

时间:2019-04-09 15:02:54

标签: javascript async-await es6-promise

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

我尝试分配[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')

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

我已经在互联网上寻找了许多解决方案,但是找不到任何可以帮助您的东西。

编辑1:

如果我分配: 让abc =等待fetchData() 如果没有then语句,它将抛出此错误: 未捕获的SyntaxError:等待仅在异步函数中有效

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

2 个答案:

答案 0 :(得分:0)

应该是这样

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().

答案 1 :(得分:0)

为使await关键字起作用,它必须位于async函数内部。因此,您需要先将代码包装在一个异步函数中,比如说一个主函数,然后再调用它。示例:

async function fetchData() {...}

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

main();