MDN говорит, что for await...of есть два варианта использования:
for await...ofОператор создает петлю итерации асинхронной итерации объектов, а также на итерируемых синхронизации, ...
Ранее я знал о первом: использование асинхронных итераций Symbol.asyncIterator. Но сейчас меня интересует последнее: синхронные итерации.
Следующий код выполняет итерацию по синхронной итерации - массиву обещаний. Похоже, блокирует прогресс на выполнение каждого обещания.
async function asyncFunction() {
try {
const happy = new Promise((resolve)=>setTimeout(()=>resolve('happy'), 1000))
const sad = new Promise((_,reject)=>setTimeout(()=>reject('sad')))
const promises = [happy, sad]
for await(const item of promises) {
console.log(item)
}
} catch (err) {
console.log(`an error occurred:`, err)
}
}
asyncFunction() // "happy, an error occurred: sad" (printed in quick succession, after about 5 seconds)
Поведение похоже на ожидание каждого обещания по очереди, согласно логике, показанной ниже. Это утверждение верно?
Я спрашиваю , потому что этот образец коды имеет проводную до ловушки неявного отказа , что Promise.allи Promise.allSettledизбежать, и это мне кажется странным , что эта модель будет явно поддерживается языком.
for await... ofВерно ли мое описание с синхронными итерациями, и если да, то имеет ли значение, что этот шаблон может генерировать необработанные ошибки отклонения?