एमडीएन कहता है for await...of
कि दो उपयोग-मामले हैं:
for await...of
बयान async iterable के साथ-साथ सिंक iterables पर वस्तुओं एक पाश से अधिक पुनरावृत्ति बनाता है, ...
मुझे पहले पूर्व के बारे में पता था: async iterables का उपयोग करना 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
तुल्यकालिक पुनरावृत्तियों के साथ मेरा वर्णन सही है, और यदि हां, तो क्या इससे कोई फर्क पड़ता है कि यह पैटर्न अनहेल्ड रिजेक्ट त्रुटियों को दूर कर सकता है?