2012-06-13 12 views
5

प्रोग्रामर एक त्रुटि के बारे में अधिसूचित रूप से अधिसूचित कैसे प्राप्त करें इस पर विभाजित हैं।त्रुटि का उपयोग करने के क्या फायदे हैं?

कुछ प्रोग्रामर दो तर्कों के साथ कॉलबैक का उपयोग करना पसंद करते हैं: एक मूल्य और एक बुलियन जो बताता है कि मान गलत नहीं है या नहीं।

asyncFunct(function (value, noError) { 
    if (noError) { 
     // success, do something with value 
    } else { 
     // value is the error which is thrown 
    } 
}); 

दूसरों नकारात्मक पसंद करते हैं (अर्थात् बूलियन बताना चाहिए कि क्या मूल्य गलत है): यह लाभ में है कि यह एक try catch बयान की तरह लग रहा है।

asyncFunction(function (value, isErroneous) { 
    if (!isErrorneous) { 
     // success, do something with value 
    } else { 
     // value is the error which is thrown 
    } 
}); 

asyncFunction(function (value) { 
    // success, do something with value 
}); 

तो फिर वहाँ लोग हैं, जो अतुल्यकालिक कार्य करता है और errbacks के सफल निष्पादन के लिए अलग-अलग कॉलबैक का प्रस्ताव कर रहे हैं: उनका तर्क है कि यदि आप जानते हैं कि अतुल्यकालिक समारोह एक त्रुटि फेंक कभी नहीं होगा तो आप सुरक्षित रूप से दूसरा पैरामीटर छोड़ सकते हैं इस प्रकार है असीमित कार्यों के गलत निष्पादन के लिए।

asyncFunction(function (value) { 
    // success, do something with value 
}, function (error) { 
    // handle the error 
}); 

asyncFunction(function (value) { 
    // success, do something with value 
}); 

asyncFunction(null, function (error) { 
    // handle the error 
}); 

मैं पूछ नहीं कर रहा हूँ जो विधि के लिए आप पसंद करते हैं: यह अगर वह कॉलबैक, errbacks, दोनों या कोई भी हैंडल करना चाहते प्रोग्रामर चयन करने के लिए अनुमति देता है। मैं बस प्रत्येक विधि के फायदे और नुकसान के लिए पूछ रहा हूं ताकि मुझे पता चले कि किसके लिए उपयोग करना है।

+1

कोई वास्तविक लाभ/नुकसान नहीं हैं। यह सिर्फ शैली का मामला है, इमो। – freakish

+3

एक और तरीका है, जो अधिक शक्तिशाली आईएमओ है: [स्थगित वस्तुओं] (http://blogs.msdn.com/b/ie/archive/2011/09/11/asynchronous-programming-in-javascript-with- promises.aspx)। –

+1

मैं स्थगित वस्तुओं को भी पसंद करता हूं। लेकिन जो भी तरीका आप चुनते हैं वह लगातार आपके ऐप में इसका उपयोग करता है, _best_ दृष्टिकोण चुनने से स्थिरता अक्सर अधिक महत्वपूर्ण होती है। – msanders

उत्तर

1

डिजाइन निर्णय:

यह सिर्फ निर्णय डिजाइन किया जाता है, और कुछ नहीं। यदि यह स्टैंडअलोन पैरामीटर है, तो आप स्टैंडअलोन फ़ंक्शन कर सकते हैं और "अधिक सुंदर" कोड बना सकते हैं (किसी के लिए - किसी के लिए यह अधिक गन्दा है - यह वास्तव में व्यक्तिपरक है)।

त्रुटि जटिलता:

कुछ अनुप्रयोगों में आप (filesystem.fileRead FILE_DONT_EXISTS हो सकता है, FILE_LOCKED, NOT_PERMISSIONS ..) और कुछ एप्लिकेशन में आप की जरूरत है सिर्फ त्रुटि (db.checkConnection या db.openConnection) फेंक और अधिक जटिल त्रुटियों हो सकता है।

आदेश और मतभेद:

महान एपीआई के लिए बहुत अच्छा नमूना अमेज़न से है, तो आप इसे देख सकते हैं। http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

प्रतिक्रिया: asynch समारोह copyObject(params = {}, callback) की तरह आप कॉलबैक फ़ंक्शन, जो हमेशा 2 पैरामीटर है पर: err (Error) और function(err, data) { ... } में data (Object)। त्रुटि को पहले पैरामीटर की तरह डिज़ाइन किया गया है क्योंकि यदि आपके पास त्रुटि है, तो आपके पास डेटा नहीं है। तो यह वास्तव में प्राथमिकता और आदेश के बारे में है।

// request 

getObject({ 
    param1 : something, 
    param2 : something, 
    param3 : something 
}, callback); 

// response 

function callback(error, response){ 
    if error throw err; 
    // now deal with responsei 
} 

आप देख सकते हैं, तो आप दोनों मिश्रित दो तरीके हैं। अनुरोध में आप ऑब्जेक्ट और फ़ंक्शन पास करते हैं और प्रतिक्रिया में आपको त्रुटि और ऑब्जेक्ट मिलता है (उस अनुरोध फ़ंक्शन पर)।

संबंधित मुद्दे