JS 里涉及到请求的 WEBAPI 为什么没有同步的呢?

问一个比较蠢的问题哈:JS 里涉及到请求 api 为什么没有同步的?
比如 xhr、fetch 等这类 api 肯定都是异步。

let data = ""
const result = await fetcher("google.com")
data = result

上面代码里面,为了能正确的获取 result,因此加入了 await,使用异步以实现需求

let data = ""
const result = syncFetcher("google.com")
data = result

所以是否存在同步的请求 api 呢?
不存在的话,是什么原因呢,是害怕出现「请求不响应」等这类问题导致 Bug 吗

阅读 2.2k
2 个回答

过去,包括现在,XHR 仍然是有设置为同步的参数的,XMLHttpRequest.open() 的第三个参数,设置为 false ,即可使请求变成同步的。

因为设置成同步后,会直接导致用户浏览器挂起,有的浏览器,鼠标还会显示成一个操作中的图标。

在这期间,页面将不能响应用户的其他操作,如点击等等,如果遇到网络较差的情况下,那只会更糟糕。

正因为如此,这个现在已经被标记为弃用了,后续可能会移除这个的支持。

XMLHttpRequest.open() - Web API 接口参考 | MDN

浏览器是多个线程的,包括GUI渲染线程,JavaScript引擎线程,定时器线程,异步http请求线程等,当浏览器执行js代码到了发起http请求时,就会通知http线程去执行这次请求,那如果你想要它是同步的,就要阻塞js代码的后续执行,等待http线程执行完成后,通知js线程继续执行后续代码.这样肯定会造成页面渲染的卡顿的.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题