Выполнить ниже образца , вы увидите 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...')
это нормально, потому что Javascript является однопоточным и учитывая, как вы написали код, ваши Обещания выполняются синхронно (при загрузке скрипта), в то время как setTimeout асинхронен (после скрипт был загружен).
Собственные обещания запланированы как микрозадачи. Когда текущий стек выполнения завершается, сначала выполняются микрозадачи, а после выполняются обычные задачи.
Для получения дополнительной информации о цикле событий, включая информацию о микрозаданиях, я рекомендую эту презентацию: https://www.youtube.com/watch?v=cCOL7MC4Pl0. Раздел о микрозадачах начинается через 24 минуты.