2015-02-23 14 views
6

उठाने से पहले कंसोल में कोणीय लॉग त्रुटि त्रुटि मुझे लगता है कि मैं थोड़ा पागल हो रहा हूं, लेकिन कोणीय एक वचन के लिए एक त्रुटि फेंकने लगता है भले ही मेरे पास catch परिभाषित है। यह कंसोल में त्रुटि फेंकता है, फिर catch चलाने के लिए अनुमति देता है।वादा catch

यहाँ है एक super-simple fiddle

परीक्षण कोड:

$q.when(1) 
    .then(function() { 
     throw new Error("test"); 
    }).catch(function(error) { 
     console.log('error caught', error); 
    }); 

जिसके परिणामस्वरूप सांत्वना

enter image description here (गंदा झूठा!)

यहाँ a fiddle showing what I expect to happen है: catch उठाया जाता है, और कंसोल पर कोई अन्य त्रुटि लॉग नहीं है। क्या मैं कुछ कॉन्फ़िगर करने में असफल रहा, या कोणीय एक टूटा वादा spec लागू करता है?

उत्तर

6

डिफ़ॉल्ट रूप से कोणीय लॉग इन कंसोल में सभी त्रुटियों को लॉग करता है।

कोणीय भी इस व्यवहार को ओवरराइड करने का एक तरीका प्रदान करता है। $exceptionHandler एक वैश्विक सेवा है जिसे किसी भी अपवाद ($ http, $ पाचन के दौरान त्रुटियों आदि) को संसाधित करने का मौका दिया जाता है।

आप कोड के इस टुकड़े जोड़ देते हैं तो:

myApp.factory('$exceptionHandler', function() { 
    return function(exception, cause) { 
    exception.message += ' (caused by "' + cause + '")'; 
    //throw exception; 
    }; 
}); 

तो सभी त्रुटियों को बस आगे प्रवेश बंद कर देंगे। हालांकि पकड़() हैंडलर प्रक्रिया करेंगे। अपडेट किया गया बेला: http://jsfiddle.net/5jjx5rn3/

अद्यतन:

टिप्पणी में dnc253 द्वारा बताया के रूप में यदि आप वास्तव में एक AngularJS सेवा ओवरराइड करने के लिए करना चाहते हैं, वहाँ एक बेहतर तरीका है। यहां तक ​​कि इस प्रश्न का ध्यान भी नहीं है, यह जानना बेहतर है कि किसी भी नाम के साथ एक ही नाम के साथ एक सेवा घोषित करना, सेवा पूरी तरह से बदल दी गई है (अंतिम जीत में)। यदि कोई मूल सेवा के आसपास कार्यक्षमता जोड़ना चाहता है, तो decorator सही विकल्प है।

+0

यह सही उत्तर है, लेकिन एक सजावटी को पूरी सेवा को ओवरराइट करने पर प्राथमिकता दी जाती है। Http://stackoverflow.com/questions/13595469/how-to-override-exceptionhandler-implementation – dnc253

+0

देखें लेकिन अपवाद नहीं है इस बिंदु तक भी नहीं? इसे 'पकड़' से नहीं संभाला जाना चाहिए? –

+0

@ डेविड ग्रीनबर्ग इस विधि में होने वाली हैंडलिंग के बाद 'पकड़' होता है। यही कारण है कि यह पहले कंसोल में दिखाई देता है – Tyrsius

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