javascript - .catch() 中返回的 promise 不能再次被 .catch'ed 吗?

标签 javascript google-chrome promise

我有类似的东西:

var a = somePromise.then(function() {
    throw 1;
})
.catch(function() {
    return new PromiseReturningThing();
});

a.catch(function() {alert('err');});   // inside is never called, although I know there is an error

假设 PromiseReturningThing()返回一个 Promise,它本身会抛出异常。 使用上面的代码不会出现任何警报。但使用这段代码,它可以工作:

var a = new PromiseReturningThing();
a.catch(function() {alert('err');});

有什么基本的事情我不明白吗?我在网上找不到任何示例,但我认为可以在 catch block 中返回 promise 。

PromiseReturningThing()如果您想知道的话,实际上是 PouchDB()。第一个片段中的 promise 是一些身份验证例程。

我使用的是 Chrome v37.0.2062.120

提前致谢!

编辑

也很奇怪:如果我 return null在第一个片段中 return new PromiseReturningThing(); 的位置是, a.catch 不会抛出 a is undefined Chrome 中的异常。为什么会这样?

最佳答案

是的,你减少这个例子是对的。实际的问题是我的代码如下所示:

var a = somePromise.then(function() {
    throw 1;
})
.catch(function() {
    return new PromiseReturningThing();
});

a.then(function() {
    // here we can't catch the error anymore:
    a.catch(function() {alert('err');});   // inside is never called, although I know there is an error
});

最后一行应该是

a.then(function() {
    // ...
}).catch(function() {alert('err');});   // working now

也许这会帮助其他人比我在这里更加小心。不管怎样,感谢您指出它以减少我的代码:)

关于javascript - .catch() 中返回的 promise 不能再次被 .catch'ed 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31045696/

相关文章:

javascript - 在测试中完成提取时异步路径更新

java - 如何强制 Selenium 在新窗口中打开链接?

javascript - Promise.resolve 与数组

javascript - 如何使用 mongoose 和 bluebird promise 确认更新是否成功

javascript - Highcharts,当共享工具提示显示/隐藏时获取点索引

javascript - 使用 Ajax 将值传递给 ASP.NET 中的后台代码

javascript - 如何将 Action 创建者分离到单独的文件中?

google-chrome - 谷歌浏览器返回 503 服务不可用

javascript - Chrome JS控制台,如何后台运行?

node.js - 异步 beforeAll() 在 beforeEach() 被调用之前没有完成