आप प्रभावी रूप से वादे के निर्माता निष्पादक कार्य के अंदर वादों का उपयोग कर रहे हैं, इसलिए यह वादा निर्माता विरोधी पैटर्न है ।
आपका कोड मुख्य जोखिम का एक अच्छा उदाहरण है: सभी त्रुटियों को सुरक्षित रूप से प्रचारित नहीं करना। क्यों पढ़ें वहाँ ।
इसके अलावा, 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?