2013-05-23 12 views
7

मैं एक Node.js uncaughtException की स्टैक ट्रेस को पकड़ने के लिए कोशिश कर रहा हूँ और यह विभिन्न त्रुटियों के लिए ठीक काम करता है के द्वारा लेकिन फेंक के लिए नहीं() बयान उत्पन्न uncaughtException:लापता स्टैक ट्रेस फेंक()

अपवाद संचालन पर सही स्टैक ट्रेस: ​​

$ cat errorThrow.js 
process.on('uncaughtException', function(exception) { 
    console.log('uncaughtException occurred: ' + exception.stack); 
}); 
throw('my error'); 

$ node errorThrow.js 
uncaughtException occurred: undefined 
$ 

किसी भी विचार क्यों:

$ cat errorFunc.js 
process.on('uncaughtException', function(exception) { 
    console.log('uncaughtException occurred: ' + exception.stack); 
}); 
MyError(); 

$ node errorFunc.js 
    uncaughtException occurred: ReferenceError: MyError is not defined 
    at Object.<anonymous> (/home/jolcese/code/WebEnclaves/Server/errorFunc.js:5:1) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:901:3 
$ 

() अपवाद पर स्टैक ट्रेस फेंक की वजह से गायब हैं?

धन्यवाद जोस

अस्वीकरण: मुझे पता है कि process.on ('uncaughtException') का उपयोग कर एक बहुत, बहुत बुरी बात है और मैं दंडित किया जाएगा लेकिन डोमेन का प्रयोग कर इस कोड में एक विकल्प नहीं है।

उत्तर

7

जावास्क्रिप्ट आपको कुछ भी फेंकने देता है।

यदि आप जावास्क्रिप्ट में स्टैक निशान के साथ त्रुटियों को फेंकना चाहते हैं, तो आपको Error ऑब्जेक्ट्स फेंकने की आवश्यकता है। (specification)

इसके अलावा, फेंक एक ऑपरेटर है और एक समारोह नहीं है।

throw new Error('my error'); 

अधिक जानकारी के लिए मोज़िला डेवलपर नेटवर्क पर the manual देखें का प्रयास करें।

+0

यदि आप मुझे विस्तार करना चाहते हैं कि यह वर्चुअल मशीन स्तर (v8 में) पर कैसे किया जाता है, तो मुझे बताएं। मुझे लगा कि यह आपकी समस्या को हल करने के लिए प्रासंगिक नहीं था। –

+0

उत्तर के लिए धन्यवाद बेंजामिन! क्या आप जानते हैं कि वेब वर्कर के अंदर व्यवहार अलग क्यों है? एक फेंक; एक वेब वर्कर कॉल (यदि पंजीकृत है) के अंदर बयान, विवरण, लिनेनो, कोल्नो इत्यादि प्रदान करने वाले आतंक कॉलबैक – JoseOlcese

+0

@ जोसेऑल्सीज़ हां, इसका सबसे आसान जवाब ऐसा होगा क्योंकि ऐसा इसलिए है कि उन्हें डिज़ाइन किया गया था। WebWorkers वेब मानक नोड का एक हिस्सा हैं पालन नहीं करता है। यह सिर्फ वेबवर्कर्स उपयोगी है। आम तौर पर, आपको हमेशा त्रुटि ऑब्जेक्ट्स फेंकना चाहिए और अन्य सामान नहीं जब आप डिबगिंग (जो हमेशा त्रुटियों के साथ होना चाहिए) –

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