2
如果浏览器不支持本机Promises,如何将微任务排队?
最好编写不依赖于立即回调的时间(例如微任务与宏任务)的代码,但是暂时不考虑它。 setTimeout将宏任务排队,该宏任务至少等待开始,直到所有微任务(以及它们产生的微任务)完成。这是一个例子: console.log('Macrotask queued'); setTimeout(function() { console.log('Macrotask running'); }); Promise.resolve() .then(function() { console.log('Microtask running'); }); console.log('Microtask queued'); console.log('Last line of script'); 运行代码段隐藏结果展开摘要 的行为.then上解决承诺是立即的行为根本不同的setTimeout回调-无极.then将首先运行,即使setTimeout是第一次排队。但是,只有现代的浏览器才支持Promises。如果不存在,如何正确填充微任务的特殊功能Promise? 如果您尝试使用来模仿.then的微setTimeout任务,则会排队执行宏任务,而不是微任务,因此,.then如果已将宏任务排入队列,则填充不良的代码将无法在正确的时间运行。 有一个使用的解决方案MutationObserver,但它看起来很丑陋,不是什么MutationObserver用。另外,MutationObserverIE10及更早版本不支持。如果要在本机不支持Promises的环境中排队微任务,还有其他更好的选择吗? (我实际上并不是在尝试支持IE10-这只是关于如何在没有Promises的情况下将微任务排队的理论练习)