2013-06-16 7 views
30

मैं fs.createReadStream() के ENOENT को पकड़ने में सक्षम नहीं हूं। क्या यह एक असीमित कार्य है, जो एक अलग बंद श्रृंखला में अपवाद फेंकता है?fs.createReadStream से अप्रचलित है ENOENT?

$ node -v 
v0.10.9 
$ cat a.js 
fs = require('fs') 

try { 
    x = fs.createReadStream('foo'); 
} catch (e) { 
    console.log("Caught"); 
} 

$ node a.js 

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: ENOENT, open 'foo' 

मुझे त्रुटि स्टैक के बजाय 'पकड़ा' मुद्रित होने की उम्मीद है!

उत्तर

43

fs.createReadStream ईवेंट एमिटर शैली के साथ असीमित है और अपवाद नहीं फेंकता है (जो सिंक्रोनस कोड के लिए केवल समझ में आता है)। इसके बजाय यह एक त्रुटि घटना उत्सर्जित करेगा।

var fs = require('fs') 

var stream = fs.createReadStream('foo'); 
stream.on('error', function (error) {console.log("Caught", error);}); 
stream.on('readable', function() {stream.read();}); 
+3

मुझे लगता है कि आप कह रहे हैं कि स्ट्रीम ऑब्जेक्ट सिंक्रनाइज़ हो गया है, लेकिन इसकी फ़ाइल खोलने से ईवेंट उत्सर्जन के साथ असीमित रूप से होता है। क्या कोई मौका नहीं है कि त्रुटि धारा 'stream.on (' त्रुटि ', ...) से पहले उत्सर्जित हो जाएगी? मैं यही देखता हूं कि अगर मैं इसे एक समय में नोड के आरईपीएल में टाइप करता हूं। –

+3

हां, आपको आश्वस्त किया जा सकता है कि वर्तमान टिक किसी भी घटना से पहले पूरी हो जाएगी। तो जब तक आप तुरंत अपने हैंडलर बांधते हैं, सब ठीक है। –

+0

हम्म वास्तव में भ्रमित व्यवहार है! – UpTheCreek

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