setTimeout позже, чем Promise - PullRequest
       8

setTimeout позже, чем Promise

0 голосов
/ 25 августа 2018

Выполнить ниже образца , вы увидите setTimeout обратные вызовы всегда выполняются позже, чем Promise обратный вызов. Есть ли какие-либо механизмы , вызывающие этот результат? или это не туре?

setTimeout(function() {
  console.log(1)
}, 0)

new Promise(function (resolve, reject) {
  resolve(2)
}).then(console.log)

setTimeout(function() {
  console.log(3)
}, 0)

new Promise(function (resolve, reject) {
  resolve(4)
}).then(console.log)

console.log('rush...')

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

это нормально, потому что Javascript является однопоточным и учитывая, как вы написали код, ваши Обещания выполняются синхронно (при загрузке скрипта), в то время как setTimeout асинхронен (после скрипт был загружен).

0 голосов
/ 25 августа 2018

Собственные обещания запланированы как микрозадачи. Когда текущий стек выполнения завершается, сначала выполняются микрозадачи, а после выполняются обычные задачи.

Для получения дополнительной информации о цикле событий, включая информацию о микрозаданиях, я рекомендую эту презентацию: https://www.youtube.com/watch?v=cCOL7MC4Pl0. Раздел о микрозадачах начинается через 24 минуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...