javascript - 理解JavaScript中的async和await

标签 javascript asynchronous promise async-await ecmascript-2017

我试图理解为什么当我使用 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/

相关文章:

javascript - 使用jQuery读取img src并动态插入img src

javascript - 如何在 awe.js 中添加自定义 3d 对象?

javascript - 如何使用 Node.js 查询 Mongodb?

java-8 - Vertx 3 支持 CompletableFuture 吗?

javascript - 有条件地呈现包装器元素的自定义指令

javascript - 如何从异步调用返回响应?

javascript - 如何从异步调用返回响应?

javascript - Promise.all([..]).then 永远不会解析

javascript - Promise.all 比预期更早解决

javascript - 简单的 $scope.$watch 没有被调用?