आप प्रभावी रूप से वादे के निर्माता निष्पादक कार्य के अंदर वादों का उपयोग कर रहे हैं, इसलिए यह वादा निर्माता विरोधी पैटर्न है ।
आपका कोड मुख्य जोखिम का एक अच्छा उदाहरण है: सभी त्रुटियों को सुरक्षित रूप से प्रचारित नहीं करना। क्यों पढ़ें वहाँ ।
इसके अलावा, async
/ का उपयोग await
एक ही जाल को और भी आश्चर्यजनक बना सकता है। की तुलना करें:
let p = new Promise(resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
एक भोले (गलत) async
समकक्ष के साथ:
let p = new Promise(async resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
पिछले एक के लिए अपने ब्राउज़र के वेब कंसोल में देखें।
पहला काम करता है क्योंकि प्रोमिस कंस्ट्रक्टर निष्पादक फ़ंक्शन में कोई भी तत्काल अपवाद नवनिर्मित वादे को आसानी से खारिज कर देता है (लेकिन किसी भी अंदर .then
आप अपने दम पर हैं)।
दूसरा काम नहीं करता है क्योंकि async
फ़ंक्शन में कोई भी तत्काल अपवाद फ़ंक्शन द्वारा दिए गए निहित वादेasync
को अस्वीकार कर देता है ।
चूंकि एक वादे के निर्माता निष्पादक फ़ंक्शन का वापसी मूल्य अप्रयुक्त है, यह बुरी खबर है!
तुम्हारा कोड
कोई कारण नहीं आप को परिभाषित नहीं कर सकते हैं myFunction
के रूप में async
:
async function myFunction() {
let array = await getAsyncArray();
return new Promise((resolve, reject) => {
eachLimit(array, 500, (item, callback) => {
}, error => {
if (error) return reject(error);
});
});
}
यद्यपि आपके पास पुराना समसामयिक नियंत्रण पुस्तकालयों का उपयोग क्यों करें await
?