我正在尝试理解为什么在使用async和await关键字时未解决promise。以下是我的代码
var a = 'https://jsonplaceholder.typicode.com/posts';
async function fetchData() {
const response = await fetch(a);
const data = await response.json();
return data;
}
console.log(fetchData());
fetchData函数应该返回实际数据,但它总是返回一个promise对象。我究竟做错了什么?
在调用[{userId: 1, name: 'ss'}]
fetchData()
答案 0 :(得分:1)
async的工作方式是返回一个promise。所以你能做的是:
fetchData().then(data => console.log({data}))
您打印出数据!
另外,你不需要那条线:
const data = await response.json();
因为.json()
方法是同步的,因此无需等待承诺得到解决。
所以更简单的方法是:
var a = 'https://jsonplaceholder.typicode.com/posts';
async function fetchData() {
const response = await fetch(a);
data = response.json();
// do stuff with data, synchronously
return data;
}
所以你想编写没有回调的代码,但是你需要的是在异步上下文中使用fetchData()
,所以这里有你如何做到这一点:
async function asyncPrint(aPromise) {
console.log(await aPromise);
}
asyncPrint(fetchData);
如果你是邪恶的,你可以这样做:
console.asyncLog = asyncPrint;
所以你可以运行:
console.asyncLog(fetchData());