Node.js vs Browser:链接被拒绝的承诺

如果我在Chrome版本56.0.2924.87(64位)上试用此项 – 预期结果..

Promise.reject(null).then(console.log); > Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: null} 

而如果我尝试节点v7.8.0 – 可能的错误?

 Promise.reject(null).then(console.log); > Promise { <pending> } 

我做错了什么或者这是一个错误? (我假设前者)

我有麻烦通过处理链嘲笑拒绝的承诺,因为拒绝不通过链:(

查看MDN文档,我想我已经得到了正确的语法: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

两个输出都很好。 当在两个控制台中loggingPromise.reject(null)时,你应该得到像Promise {<rejected>: null}这样的东西。
但是当你把一个.then(console.log)到它时呢?

  • Chrome应用规则“ then()没有拒绝处理程序返回一个承诺,当原始被拒绝时被拒绝 ”,并立即这样做 – 它已经知道结果将是一个被拒绝的承诺
  • 节点应用规则“ 承诺永远是asynchronous的 ”。 它返回一个挂起的承诺,并创buildcallback来解决它 – 在这种情况下,鉴于原始已被拒绝,并没有拒绝处理程序通过,它会立即安排拒绝结果的承诺。

Promise / A +标准允许两种实现,第一种实现可能效率更高,而第二种实现更接近EcmaScript规范中描述的行为。
实际上,你不会注意到有什么不同。

既然你拒绝你的诺言,你需要定义一个error handling函数作为第二个参数:

 Promise.reject(null).then(console.log, console.error); 

或使用.catch()

 Promise.reject(null).catch(console.error);