我试图理解为什么当我使用 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()
后
最佳答案
异步的工作方式是它返回一个 promise 。所以你可以做的是:
fetchData().then(data => console.log({data}))
您将打印出您的数据!
此外,您不需要该行:
const data = await response.json();
因为 .json()
方法是同步的,因此无需等待 Promise 得到解析。
所以更简单的方法是:
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());
关于javascript - 理解JavaScript中的async和await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50426158/