为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不像 XHR 中那样同步版本的异步 API?

为什么不像 XHR 中那样同步版本的异步 API?

哈士奇WWW 2022-09-02 17:15:05
我脑海中的想法是,所有的东西都是因为在运行时之外处理的东西。但我知道我可以同步发送请求。所以我对此提出了几个问题。WebAPIasyncJavaScriptXMLHttpRequestAPI 是运行时的一部分吗?如果是这样,如何异步发送请求?为什么不将其他有用的API实现到Javascript本身,而不将它们公开为s?XMLHttpRequestJavascriptWebAPIAPI 是 s 的一部分吗?那么,为什么没有其他同步 API 呢?为什么不是同步 API?XMLHttpRequestWebAPIsetTimeout
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

XMLHttpRequest API是Javascript运行时的一部分吗?

这取决于你所说的“JavaScript运行时”是什么意思。它们不是JavaScript标准库的一部分,不。它们是 Web 浏览器中主机提供的功能。

XMLHttpRequest API 是 WebAPI 的一部分吗?

是的,它是一个网络API。

那么,为什么没有其他同步 API 呢?

有。例如,几乎所有的DOM操作都是同步的。但是,需要花费大量时间(如网络请求)并从主UI线程(默认情况下JavaScript在浏览器中运行的地方)启动的事情最好异步完成,以避免阻塞该线程并阻止UI更新。因此,默认情况下,异步(并且使用标志使其同步已被弃用),始终是异步的,并且可能需要时间的各种其他操作是异步的。XMLHttpRequestfetch

在现代环境中,¹ 使用异步 API 与使用同步 API 一样简单,这要归功于以下功能:async

async function showMoreData() {

    const response = await fetch("/more/data/please");

    if (!response.ok) {

        throw new Error("HTTP error " + response.status);

    }

    const data = await response.json();

    for (const entry of data) {

         // ...do something...

    }

}

¹ “现代环境” - 现在大多数浏览器都支持本机功能,如果您必须以IE11或其他过时的浏览器为目标(可悲的是,我们中的许多人都这样做!),您可以使用像Babel这样的工具将现代代码转换为将在这些环境中运行的旧代码。你写最新的东西,他们把它变成IE11可以理解的东西。async


查看完整回答
反对 回复 2022-09-02
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号