MDN'nin iki kullanım durumu olduğunu söylüyor for await...of :
for await...ofİterable yanı sıra senkronizasyon Iterables üzerinde nesneleri zaman uyumsuz ifadesi yineleme bir döngü oluşturur ...
Daha öncekinin farkındaydım: kullanarak asenkron yinelenebilir Symbol.asyncIterator. Ama şimdi ikincisi ile ilgileniyorum: senkron yinelemeler.
Aşağıdaki kod senkronize bir yinelenebilir - bir dizi vaat üzerinden yinelenir. Her vaadin yerine getirilmesi konusundaki ilerlemeyi engelliyor gibi görünmektedir.
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)
Davranış, aşağıda gösterilen mantığa göre her bir sözü sırayla beklemeye benziyor gibi görünmektedir. Bu iddia doğru mu?
Ben soruyorum çünkü bu kod paterni kapalı bir ret telsizi tuzağına sahip Promise.allve Promise.allSettledkaçınıyor ve bu kalıbın dil tarafından açıkça destekleneceği garip görünüyor.
for await... ofEşzamanlı yinelenebilirlerle açıklamam doğru mu ve eğer öyleyse, bu kalıbın işlenmeyen reddetme hataları verebileceği önemli mi?