使用 queueMicrotask 创建微任务!

博客分享了浏览器产生微任务的方法。此前创建自定义微任务有多种方式,偶然发现浏览器原生的queueMicrotask方法可产生微任务,它存在于特定对象中,兼容性不错,用法简单,只需传入想包装成微任务的函数。该提案早在18年就已通过。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前我们想尽一切办法来创建一个自定义的微任务,如 Promise.thenMutationObserver(浏览器环境中的 API,用于监视 DOM 变动)、async/awaitprocess.nextTick(仅Node.js支持,本质来说它不是事件循环的一部分)。

在偶然的情况下,我发现浏览器竟然具有专门产生微任务的方法!

2023-09-23-13-48-54

它就是原生的 queueMicrotask 方法,该方法存在于 window 对象中,并且目前兼容性还不错:

2023-09-23-13-50-31

queueMicrotask 用法很简单,传入一个想要被包装成微任务的函数即可,看下面的例子:

console.log('1');
queueMicrotask(() => {
  console.log('2');
  Promise.resolve().then(() => {
    console.log('3');
  });
  setTimeout(() => {
    console.log('4');
    queueMicrotask(() => {
      console.log('5');
    });
  });
});
setTimeout(() => {
  Promise.resolve().then(() => {
    console.log('6');
  });
  console.log('7');
  queueMicrotask(() => {
    console.log('8');
  });
});
console.log('9');

打印结果: 1 9 2 3 7 6 8 4 5

相对来说,queueMicrotask 是产生微任务最方便的方法了,希望还没实现的浏览器厂商抓紧时间跟进!

网上搜了一下,发现早在18年 queueMicrotask 提案就得到了通过,19年就有哥们介绍了该 API,我竟然现在才知道,实属汗颜。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baker-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值