如果我在promise catch
处理程序中抛出错误,则错误永远不会冒出来!
Promise.resolve()
.then(function() { return foo.bar(); })
.then(function() { return console.log('ok!'); })
.catch(function(err) { return baz.quux(); });
在带有promise模块的Node v0.8和Chrome 36的JavaScript控制台中,都不打印任何内容。我希望看到ReferenceError: baz is not defined
出现某处。
我们不应该看到某事吗?这是我错过的承诺规范的一部分吗?
更新:澄清:Chrome 36的V8中没有任何第三方模块。
答案 0 :(得分:2)
是的,这是承诺实施面临的问题。然而,你选择的两个失败了很糟糕。确实 - 在您的情况下误解了错误,除非您自己附加错误处理程序,否则您将无法获得此静默失败的任何指示。
您的选择是:
.done
之类的Q的库,并手动将.done
附加到代码中的每个承诺,以表明您不会为其附加处理程序。特别是,Bluebird比本机承诺更快,并且做得恰当。它也是本机承诺的超集,因此您可以根据需要编写使用该子集的代码(尽管它具有更丰富的API)。您上面的代码记录了Bluebird的未处理拒绝。
顺便说一下,Firefox处理得更好,Firefox原生承诺会检测未处理的拒绝。