हैंडल करना तर्कों को मान्य करना और कार्यों में त्रुटि लौटना आम बात है।जावास्क्रिप्ट कॉलबैक त्रुटि
हालांकि, इस तरह के रूप में जावास्क्रिप्ट कॉलबैक फ़ंक्शन, में:
function myFunction(num, callback) {
if (typeof num !== 'number') return callback(new Error('invalid num'))
// do something else asynchronously and callback(null, result)
}
मैं इस तरह के कार्यों का एक बहुत कुछ लिखा था, लेकिन मुझे आश्चर्य है कि वहाँ कुछ हानिकारक है या नहीं। क्योंकि ज्यादातर मामलों में, कॉलर मानता है कि यह एक एसिंक्रोनस फ़ंक्शन है और कॉलबैक फ़ंक्शन कॉल के ठीक बाद कोड के बाद निष्पादित होगा। लेकिन अगर कुछ तर्क अमान्य हैं, तो फ़ंक्शन तुरंत कॉलबैक को कॉल करेगा। तो कॉलर को स्थिति से निपटने के लिए सावधान रहना चाहिए, यानी, एक अप्रत्याशित निष्पादन अनुक्रम।
मैं इस मुद्दे पर कुछ सलाह सुनना चाहता हूं। क्या मुझे सावधानीपूर्वक यह मानना चाहिए कि सभी एसिंक्रोनस कॉलबैक तुरंत निष्पादित किए जा सकते हैं? या मुझे सिंक्रोनस चीज़ को एसिंक्रोनस में कनवर्ट करने के लिए setTimeout (..., 0) जैसे कुछ का उपयोग करना चाहिए। या एक बेहतर समाधान है जिसे मैं नहीं जानता। धन्यवाद।
मैंने अपना डाउनवोट हटा दिया। मुझे लगता है कि जिस तरह से फ़ंक्शन कहा जाता है, उसके सत्यापन के लिए काफी गंभीर है और उत्पादन में ऐसा नहीं होना चाहिए। –
@ पैट्रिक रॉबर्ट्स: मैंने जवाब के उस हिस्से को हटा दिया है, यह वास्तव में प्रश्न के लिए प्रासंगिक नहीं था। मैं आपका मुद्दा देख सकता हूं, हालांकि मैं इसके साथ सहमत नहीं हूं (अभी तक); मुझे इसके बारे में और अधिक सोचने की जरूरत है। मुझे लगता है कि यदि आप एक ES2015 वादा के सेटअप के दौरान फेंक देते हैं ('चलो पी = नया वादा (संकल्प => {नई त्रुटि फेंक दें);))'), यह वादा कन्स्ट्रक्टर द्वारा अस्वीकार कर दिया जाता है, जो आपके समर्थन करता है उस एपीआई के डिजाइन में गए विचार और अनुभव को देखते हुए एक त्रुटि चैनल के पक्ष में तर्क ... –
मेरा दृष्टिकोण भी गलत है। जैसा कि टिप्पणीकार ने मुझे बताया, कॉलस्टैक विचार करने के लिए बहुत महत्वपूर्ण है, खासकर जब आपके फ़ंक्शन का उपयोग करने वाला डेवलपर अनिश्चित काल तक पुनः प्रयास करने का प्रयास करता है, अंततः त्रुटियों के दौरान आपका फ़ंक्शन सिंक्रोनस होता है, जिसके परिणामस्वरूप स्टैक ओवरफ्लो होता है। –