You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XHR属宏任务、Fetch属微任务是否属实?为何二者处理逻辑不同?

XHR与Fetch在事件循环中的任务队列差异解答

1. 结论是否属实?

  • 确实是这样的。XHR的回调(比如onload、onerror这类)会被放进宏任务队列;而Fetch的then()/catch()/finally()回调会被排入微任务队列。

2. 为什么会有这种差异?不该用相同的处理方式吗?

  • 历史遗留因素:XHR是很早的异步网络API,它诞生的时候,浏览器事件循环里的微任务机制还没成熟,当时所有异步回调基本都走宏任务队列,这么做是为了兼容早期的浏览器运行逻辑。
  • API设计的时代差异:Fetch是跟着ES6的Promise规范出来的现代API,Promise的回调本身就是微任务队列的核心内容。微任务会在当前宏任务干完之后立刻执行,不用等下一轮事件循环,能让异步结果处理得更及时,减少UI线程空等的时间,页面响应会更流畅。
  • 适配现代异步生态:Fetch的设计就是为了更好地融入ES6+的异步体系(比如async/await),而async/await本质是Promise的语法糖,必须依赖微任务队列才能实现连贯的异步流程,所以Fetch用微任务队列是顺理成章的选择。

内容的提问来源于stack exchange,提问作者thecoder-elite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:05:29