2016-12-04 39 views
1

当节点7.2.0运行此代码:为什么在节点7.2.0中记录被拒绝的`Promise`会导致记录堆栈跟踪?

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

console.log(prms); 

我期待Promise {<rejected> Error: error}记录到控制台,而是我收到此输出:

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 } 

这是为什么?

回答

2

你看到的是错误的.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'] } 
+0

但为什么被记录到控制台'.valueOf'部分。这是节点7.2.0中的新东西吗? - 我更新之前的输出是不同的。节点 – rabbitco

+0

@rabbitco'console.log'没有标准化,所以它可以输出任何开发者想要的东西。 – zerkms

相关问题