Мой вопрос касается nodejs события l oop
Рассмотрим этот код
(async () => {
let val = 1
const promise = new Promise(async resolve => {
resolve()
await new Promise(async r => {
setTimeout(r)
})
await promise
val = 2
})
await promise
await new Promise(resolve => setTimeout(resolve))
console.log(val)
})()
С узлом 10.20.1 (последняя версия узла 10 )
for ((i = 0; i < 30; i++)); do /opt/node-v10.20.1-linux-x64/bin/node race-timeout.js; done
С узлом 12.0.0 (первая версия узла 12)
for ((i = 0; i < 30; i++)); do /opt/node-v12.0.0-linux-x64/bin/node race-timeout.js; done
Результат узла 10
1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 1 1 2 2 1 2 1 1 2 1
Результат узла 12
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
До сих пор я знал, что node - это однопоточный язык. Все четко определено и выполняется в точном порядке, кроме случаев вмешательства на этапе опроса.
Приведенный выше код не включает каких-либо неопределенных факторов (таких как ввод-вывод, сеть, ...). Я ожидал, что результат должен быть таким же. Однако в узле v10 это не так.
Каков случайный фактор в узле v10?