निम्न कोड चलाते समय, मुझे console.log("fnError: ", fnError)
पर टिप्पणी की गई है या नहीं, इसके आधार पर मुझे अलग-अलग परिणाम मिलते हैं। यह मेरे लिए बहुत दूर लगता है।वचन catch और console.log के साथ नोडजेएस बग?
दुनिया में कैसे console.log
पर मेरे वादे को प्रभावित करने का आह्वान है?
function run() {
var fn = function(){
throw new Error("incorrect message");
};
// returns a promise that should fail with
// an error object whose .message is "correct message"
var promisifiedFn = function(){
return Promise.resolve()
.then(fn)
.catch((fnError) => {
// commenting this out fixes things! //
console.log("fnError: ", fnError);
///////////////////////////////////////
fnError.message = "correct message";
throw fnError;
})
}
promisifiedFn().catch((e) => {
console.log("caught error.message:", e.message);
console.log("caught error:", e);
});
}
run();
ऊपर का उत्पादन:
// fnError: Error: incorrect message
// at fn (/Users/sam/dev/ethereum/pennyeth/js/temp.js:18:9)
// at <anonymous>
// at process._tickCallback (internal/process/next_tick.js:169:7)
// ...
// caught error.message: correct message
// caught error: Error: incorrect message
// at fn (/Users/sam/dev/ethereum/pennyeth/js/temp.js:18:9)
// at <anonymous>
// at process._tickCallback (internal/process/next_tick.js:169:7)
// ...
सूचना "गलत संदेश" लॉग इन किया जा रहा है। और अगर आप बाहर टिप्पणी console.log("fnError: ", fnError)
आप इस मिल:
// caught error.message: correct message
// caught error: Error: correct message
// at fn (/Users/sam/dev/ethereum/pennyeth/js/temp.js:18:9)
// at <anonymous>
// at process._tickCallback (internal/process/next_tick.js:169:7)
// ....
नोड 8.0.0
नोट: मेरे वास्तविक एप्लिकेशन कोड में, मैं इसे पुनर्स्थापित करने से पहले त्रुटि को लॉग इन नहीं कर रहा हूं, और मुझे अभी भी यह व्यवहार मिलता है। दुर्भाग्य से मैं इसका एक न्यूनतम उदाहरण समझने में सक्षम नहीं हूं। –
यह विचित्र है। मैंने इसे क्रोम 59 की कोशिश की और इसमें एक ही समस्या नहीं है। लेकिन नोड 7.9.0, नोड 8.0.0, और नोड 8.1.2 सभी में यह व्यवहार (या बग) है। – styfle
मेरा एकमात्र विचार यह है कि console.log stdout को प्रस्तुत करने से पहले त्रुटि ऑब्जेक्ट को कैशिंग कर रहा है। ध्यान दें कि "गलत संदेश" दोनों परिणाम एक ही ऑब्जेक्ट को लॉग कर रहे हैं। – styfle