我如何处理蓝鸟协程中的错误?
我在节点中使用了co一段时间,它具有很好的捕捉功能。
co(function*() {
return new Promise(function(resolve, reject) {
// whatever stuff
});
}).catch(function(err) {console.error(error.stack)});
但是在浏览器/客户端使用蓝鸟这是一场彻头彻尾的噩梦。没有捕捉功能,我回来的错误 - 如果有的话 - 是匿名的还是未处理的,这是完全的脑力......
我已经在bluebirdjs的网站上查了一下,几个月前就如何处理错误进行了讨论。有人甚至写道:
应该有一个更好的例子,强调使用try,catch和最后的coroutine的好处。
http://bluebirdjs.com/docs/api/promise.coroutine.html
我的意思是:尝试,最后抓住协同程序?我承认,我甚至一直在遵循这几个惯例的建议,但我似乎并不正确。 Promise和coroutines的全部意义在于摆脱丑陋的过度嵌套,回调创造了什么呢?现在是什么?我们又来了?
如果有人知道如何将这个bluebirdjs错误混乱变成更好的解决方案,我会非常感激。
答案 0 :(得分:0)
如果co
是蓝鸟Promise.coroutine
,它会自动传播错误并记录未处理的拒绝。
记录未处理的错误。您可以处理以下错误:
Promise.coroutine(function*() {
try {
doSomething();
yield doSomethingAsync();
} catch (e) {
// handle error
}
})();