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 而没有解决它。
为了使await关键字起作用,它必须位于async函数内部。所以你需要先把你的代码包装在一个异步函数中,假设一个主函数,然后调用它。例子:
async function fetchData() {...}
async function main() {
let abc = await fetchData();
console.log(abc);
}
main();
Run Code Online (Sandbox Code Playgroud)
应该是这样的
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)
| 归档时间: |
|
| 查看次数: |
18573 次 |
| 最近记录: |