Я вижу такое поведение в Node и Chrome:
setTimeout(()=>{ console.log('timeout') }, 0)
Promise.resolve().then(()=>{ console.log('promise') })
console.log('sync')
// output order:
// sync
// promise
// timeout
Мой вопрос в том, является ли это последовательным поведением? То есть, согласно спецификации, всегда ли срабатывает then
или await
в мемоизированном/уже разрешенном промисе до setTimeout(fn, 0)
?
Я хочу использовать это примерно в следующем, возвращая одно, если у меня есть запомненный результат в моем обещании, и другое, если нет:
// somewhere during object initialization
this.resultingPromise = expensiveAsyncFunction()
// in a method called frequently
Promise.race([
new Promise(resolve => setTimeout(() => resolve('default'), 0)),
this.resultingPromise
])
task queue
10.01.2019