2015-10-27 8 views
7

मैं चाहता हूं कि एक प्रकार की त्रुटि होने पर ब्राउज़र एक त्रुटि संदेश दिखाए।
जैसी त्रुटियां अपरिभाषित या अपरिभाषित संदर्भ की संपत्ति को पढ़ नहीं सकती हैं।es6 निगल प्रकार त्रुटियों का वादा करता है

new Promise(function(resolve,reject){ 
    // do stuff ... 
    reject('something logical is wrong'); 
}).catch(e => console.error(e)); 

new Promise(function(resolve,reject){ 
    // do stuff, and a syntax error :/ 
    var a = { }; 
    a.something.otherthing = 1; /* we have an error here */ 
    // ... 
}).catch(e => console.error(e)); 

पहले उदाहरण में त्रुटि एक तार्किक एक है, और पकड़ यहपकड़ में (..) ब्लॉक करने के लिए अपने ठीक।
लेकिन दूसरे उदाहरण में यह एक स्पष्ट विकास त्रुटि है, जो नई चीजें विकसित करते समय हर समय होता है। मैं इसे पकड़ना नहीं चाहता, मैं चाहता हूं कि ब्राउज़र मुझे कंसोल में अन्य त्रुटियों की तरह त्रुटि दिखाए। मैं अपवाद पर क्रोम विराम चालू करने और अन्य चर की स्थिति को देखने में सक्षम होना चाहता हूं। मैं कंसोल में स्टैक ट्रेस देखना चाहता हूं।
मैं इसे सामान्य त्रुटि की तरह कार्य करना चाहता हूं।

कोई विचार?

+0

का उपयोग करने के लिए घातक था आपका दूसरा उदाहरण, मुझे अपने कंसोल में निम्न त्रुटि मिलती है 'TypeError: अपरिभाषित' की संपत्ति 'अन्य चीज़' सेट नहीं कर सकता। क्या आप ऐसा नहीं करना चाहते हैं? वादा लंबित है, लेकिन यह एक अलग मुद्दा है। – AdamJeffers

+0

मैं त्रुटि के लाइन नंबर, स्टैक ट्रेस करना चाहते हैं। –

+0

@AdamJeffers मैं उपयोग करने के लिए * क्रोम * ब्रेक अपवाद भी सुविधा पर चाहते हैं। –

उत्तर

5

तुल्यकालिक कोड में अपवाद है, जो बन ध्यान में न आया जैसे ही कोड निष्क्रिय रिटर्न के रूप में, एक ब्राउज़र आम तौर पर एक वादा श्रृंखला के तार्किक अंत नहीं जानता है के विपरीत, जो है, जहां एक अतुल्यकालिक त्रुटि सकता है बेकार माना जाना चाहिए। चेन गतिशील रूप से सभी के बाद इकट्ठे होते हैं, और इसलिए श्रृंखला के तार्किक अंत में अंतिम .catch के साथ बेहतर रूप से निष्क्रिय किया जाता है, जैसे निष्क्रिय के असीमित समकक्ष।

अंतिम .catch(e => console.error(e)) होने के कारण मेरे लिए बहुत उचित लगता है, लेकिन आप सही हैं कि ब्राउज़र इन त्रुटियों को बेजोड़ अपवादों से अलग रूप से प्रदर्शित करते हैं।

.catch(e => setTimeout(() => { throw e; })) 

यह e फेंक देते हैं, तो अगले ही चक्र पर मूल स्टैक ट्रेस और लाइन नंबर, युक्त, और वादा श्रृंखला है, जहां के बाहर: आप उन्हें एक ही प्रकट करना चाहते हैं, तो आप इस चाल का उपयोग कर सकते कुछ भी इसे पकड़ नहीं पाएगा और यह बेकार के रूप में रिपोर्ट किया जाएगा। हम setTimeout का उपयोग .catch के डिफ़ॉल्ट व्यवहार के मामले में में श्रृंखला किसी भी अपवाद आप श्रृंखलन पर रखने का इरादा कब्जा करने के लिए है जो काबू पाने के लिए।

इस के साथ

, मुझे आशा है कि आप देखते हैं कि "तार्किक" और अन्य त्रुटियों के बीच कोई भेदभाव अप्रासंगिक है। कोई त्रुटि होने पर श्रृंखला की पूंछ के लिए बनाता है कि श्रृंखला यानी ध्यान में न आया (हालांकि निश्चित रूप आप अंतिम पकड़ में ट्राइएज अन्य त्रुटियों से "तार्किक" और उन्हें अलग तरह से यदि आप चाहें तो प्रदर्शित कर सकते हैं।)

2

क्रोम पकड़ा अपवादसूत्रों का कहना है टैब में पर एक विकल्प रोकें है, मैं उस विकल्प और अपवाद पर रोकें सुविधा अब ठीक काम कर रहा है सक्षम होना चाहिए।

+1

यह तार्किक त्रुटि और 'TypeError' दोनों पर रोक देगा, इसलिए यह आपके अपने प्रश्न के मानदंडों को फिट नहीं लगता है। – jib

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