【发布时间】:2016-12-01 19:20:33
【问题描述】:
我应该如何处理 bluebird 协程中的错误?
我在 node 中使用 co 有一段时间了,它有一个很好的 catch 功能。
co(function*() {
return new Promise(function(resolve, reject) {
// whatever stuff
});
}).catch(function(err) {console.error(error.stack)});
但是在浏览器/客户端使用蓝鸟,这简直就是一场噩梦。没有 catch 函数,我返回的错误(如果有的话)要么是匿名的,要么是未处理的,这完全是脑残......
我在 bluebirdjs 的网站上查看过,几个月前有关于如何处理错误的讨论。终于有人写道:
应该有一个更好的例子来强调在协程中使用 try、catch 和 finally 的好处。
http://bluebirdjs.com/docs/api/promise.coroutine.html
我的意思是:try、catch finally 嵌套在协程中?我承认,我什至在几个例程中都遵循了这个建议,但我似乎并不正确。 Promises 和协程的全部意义在于摆脱丑陋的过度嵌套,回调已经创建了这些嵌套,现在呢?我们又来了?
如果有人知道如何将这种 bluebirdjs 错误混乱转变为更好的解决方案,我将不胜感激。
【问题讨论】:
-
Promise.coroutine==co.wrap。两者都返回返回具有catch方法的承诺的函数。 -
@Bergi 愚蠢的我,你是对的。我试图在调用之前设置 catch 像这样 Promise.coroutine(/ generator stuff /).catch(handler) 而不是 Promise.coroutine(/ 生成器的东西 /).().catch(handler)
标签: javascript error-handling bluebird coroutine