Обещания и заказ MatchMedia - PullRequest
       45

Обещания и заказ MatchMedia

0 голосов
/ 26 октября 2019

У меня есть этот код:

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 все наоборот.

Я не понимаю, почему это отличается? Можно ли форсировать выполнение?

1 Ответ

1 голос
/ 26 октября 2019

Согласно спецификациям цикла событий, микрозадачи выполняются перед любыми обратными вызовами рендеринга. К сожалению, ни один из браузеров не придерживается спецификаций. Chrome далеко не самый близкий, и поэтому Promise, будучи микрозадачей, выполняется первым. Firefox не соответствует спецификацииесли у вас есть обратные вызовы для события того же типа.

...