वादा-आधारित कोड को समकालिक रूप से चलाना सुनिश्चित करने के लिए सही लूप संरचना ढूंढना
वादा-आधारित कोड के साथ काम करते समय, सही लूप संरचना होती है अतुल्यकालिक संचालन के तुल्यकालिक निष्पादन की गारंटी के लिए आवश्यक है। दिए गए परिदृश्य में, लक्ष्य एक लूप का निर्माण करना है जो प्रत्येक पुनरावृत्ति के दौरान सही क्रम में "db.getUser(email).then(function(res) { logger.log(res); })" का निष्पादन सुनिश्चित करता है।
एक दृष्टिकोण एक कस्टम "promiseWhile" फ़ंक्शन को नियोजित करता है। हालाँकि यह विधि सामान्य परिदृश्यों के लिए उपयोगी हो सकती है, लेकिन यह मौजूदा विशिष्ट मामले के लिए अनावश्यक जटिलता लाती है। इसके बजाय, एक अधिक सीधा समाधान मानचित्र() और कम() जैसे अंतर्निहित सरणी हेरफेर कार्यों का लाभ उठाना है।
समानांतर बनाम सीरियल वादे
समस्या निहित है प्रतिक्रियाओं के क्रम को बनाए रखने की आवश्यकता में, जो Array.prototype.map() के माध्यम से समानांतर दृष्टिकोण के उपयोग को समाप्त करता है। संरक्षित क्रम के साथ वांछित वादा श्रृंखला का निर्माण करने के लिए, Array.prototype.reduce() अधिक उपयुक्त है। वापसी arr.reduce(फ़ंक्शन(वादा, ईमेल) { वापसी का वादा.तब(फ़ंक्शन() { वापसी db.getUser(email).done(function(res) { लकड़हारा.लॉग(रेस); }); }); }, Promise.resolve()); }
इस पद्धति का उपयोग करके, "db.getUser" कॉल के निष्पादन को क्रमिक होने की गारंटी दी जाती है, जिससे यह सुनिश्चित होता है कि परिणामों का क्रम बना हुआ है। कोड को इस प्रकार कहा जा सकता है:
function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }
यह दृष्टिकोण जटिल लूप या शर्तों की आवश्यकता को समाप्त करता है और अतुल्यकालिक संचालन से निपटने के दौरान भी वादा श्रृंखला का उचित निष्पादन सुनिश्चित करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3