理解异步并在JavaScript中等待

时间:2018-05-19 14:06:45

标签: javascript asynchronous promise async-await es2017

我正在尝试理解为什么在使用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()

1 个答案:

答案 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());