为什么在节点7.2.0中logging被拒绝的`Promise`会导致logging一个堆栈跟踪?

在节点7.2.0中运行此代码时:

let prms = Promise.reject(new Error('error')); prms.catch(() => {}); console.log(prms); 

我正在期待Promise {<rejected> Error: error}被logging到控制台,而是我收到这个输出:

 Promise { <rejected> Error: error at Object.<anonymous> (/Users/davidlund/Dropbox/test.js:1:89) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at tryModuleLoad (module.js:447:12) at Function.Module._load (module.js:439:3) at Module.runMain (module.js:605:10) at run (bootstrap_node.js:420:7) at startup (bootstrap_node.js:139:9) at bootstrap_node.js:535:3 } 

这是为什么?

你所看到的是错误的.valueOf表示:

 > (new Error('error')).valueOf(); Error: error at repl:1:2 at realRunInThisContextScript (vm.js:22:35) at sigintHandlersWrap (vm.js:98:12) at ContextifyScript.Script.runInThisContext (vm.js:24:12) at REPLServer.defaultEval (repl.js:313:29) at bound (domain.js:280:14) at REPLServer.runBound [as eval] (domain.js:293:12) at REPLServer.onLine (repl.js:513:10) at emitOne (events.js:101:20) at REPLServer.emit (events.js:188:7) 

比较:

 function Foo() { } Foo.prototype.valueOf = function () { return "FOOBAR" } let prms = Promise.reject(new Foo); prms.catch(() => {}); console.log(prms); // Promise { <rejected> [String: 'FOOBAR'] }