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);