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

根据经验,永远不要依赖执行顺序,除非您对同一类型的事件有回调。