【发布时间】:2020-04-20 15:47:11
【问题描述】:
我一直在关注一个教程,并遇到了以下代码 sn-p:
const myAsyncFunction = async () => {
const usersResponse = await fetch(
'https://jsonplaceholder.typicode.com/users'
)
const userJson = await usersResponse.json();
const secondUser = userJson[1];
console.log(secondUser);
const posts = await fetch (
'https://jsonplaceholder.typicode.com/posts?userId=' + secondUser.id
);
const postsJson = await posts.json();
console.log(postsJson);
}
myAsyncFunction();
不应该立即将响应转换为 JSON 对象,就像从数组中获取值一样,例如userJson[1] 有吗?为什么需要awaitusersResponse.json()和posts.json()?
【问题讨论】:
-
因为读取和解析请求体不必阻塞。
-
好的,谢谢!那时我可能对 Promise 产生了错误的印象,因为我认为异步操作通常只与 http 请求/获取有关。但这是否也意味着本地 cpu 繁重的操作默认是异步的?
-
@user3545063 不,这并不意味着本地 CPU 密集型操作将是异步的。那将是同步的。
.json()是异步的,因为在调用.json()时可能尚未读取整个响应正文。查看the Response MDN page 上的方法描述并注意其中包括.json()在内的一些方法说“接受一个响应流并读取它以完成”。 (强调)
标签: javascript asynchronous promise async-await