Javascript 承诺与媒体秩序

Javascript 承诺与媒体秩序,javascript,browser,promise,matchmedia,Javascript,Browser,Promise,Matchmedia,我有这样一种代码的和平: const mql = window.matchMedia('(min-width: 400px)'); mql.addListener(e => { if (e.matches) console.log('Match!'); }); Promise.resolve('Resolved').then(console.log); 当我在Chrome上执行它时,输出是“已解析”的,在“匹配”之后。 然而在Firefox上,情况恰恰相反

我有这样一种代码的和平:

const mql = window.matchMedia('(min-width: 400px)');
mql.addListener(e => {
     if (e.matches)
          console.log('Match!');
});

Promise.resolve('Resolved').then(console.log);
当我在Chrome上执行它时,输出是“已解析”的,在“匹配”之后。 然而在Firefox上,情况恰恰相反


我不明白为什么不同?是否可以强制执行顺序?

根据事件循环规范,微任务在任何渲染回调之前执行。不幸的是,没有一款浏览器遵循这些规范。Chrome远不是最接近的,这就是为什么承诺是一个微任务首先被执行的原因。Firefox超出了规格

有关事件循环的更多信息和差异,请查看此链接

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