Promises 和 MatchMedia 订单
Promises and MatchMedia order
我有这个安宁的代码:
const mql = window.matchMedia('(min-width: 400px)');
mql.addListener(e => {
if (e.matches)
console.log('Match!');
});
Promise.resolve('Resolved').then(console.log);
当我在Chrome上执行它时,输出是'Resolved'和'Match'之后。
然而在 Firefox 上,情况恰恰相反。
我不明白为什么不一样?是否可以强制执行命令?
根据事件循环规范,微任务在任何渲染回调之前执行。不幸的是,none 的浏览器遵守规范。 Chrome 远不是最接近的,这就是为什么首先执行作为微任务的 Promise 的原因。 Firefox 不在规格范围内。
您可以查看此 link 以获取有关事件循环的更多信息和差异 https://github.com/atotic/event-loop
根据经验,永远不要依赖执行顺序,除非您对同一类型的事件有回调。
我有这个安宁的代码:
const mql = window.matchMedia('(min-width: 400px)');
mql.addListener(e => {
if (e.matches)
console.log('Match!');
});
Promise.resolve('Resolved').then(console.log);
当我在Chrome上执行它时,输出是'Resolved'和'Match'之后。 然而在 Firefox 上,情况恰恰相反。
我不明白为什么不一样?是否可以强制执行命令?
根据事件循环规范,微任务在任何渲染回调之前执行。不幸的是,none 的浏览器遵守规范。 Chrome 远不是最接近的,这就是为什么首先执行作为微任务的 Promise 的原因。 Firefox 不在规格范围内。
您可以查看此 link 以获取有关事件循环的更多信息和差异 https://github.com/atotic/event-loop
根据经验,永远不要依赖执行顺序,除非您对同一类型的事件有回调。