bluebirdjs协程错误处理(浏览器)

bluebirdjs coroutine error handling (browser)

我应该如何处理 bluebird 协程中的错误?

我在node中使用co已经有一段时间了,它有很好的catch功能。

co(function*() {

    return new Promise(function(resolve, reject) {
        // whatever stuff
    });

}).catch(function(err) {console.error(error.stack)});

但是 browser/client 一方有蓝鸟,这完全是一场噩梦。没有 catch 函数,我返回的错误——如果有的话——要么是匿名的,要么是未处理的,这完全是脑力...

我查看了 bluebirdjs 的网站,几个月前有人在讨论如何处理错误。最后有人写道:

There should be a better example highlighting the benefits of using try, catch and finally inside coroutine.

http://bluebirdjs.com/docs/api/promise.coroutine.html

我的意思是:试试看,catch终于嵌套在协程里了?我承认,我什至在一些例程中一直遵循该建议,但我似乎并不正确。 Promises 和协同程序的全部意义在于摆脱丑陋的过度嵌套,回调已经创建,现在怎么办?又来了?

拜托,如果有人知道如何将这个 bluebirdjs 错误混乱变成更好的解决方案,我将不胜感激。

如果 co 是蓝鸟 Promise.coroutine 它将自动传播错误并记录未处理的拒绝。

记录了未处理的错误。您可以处理如下错误:

Promise.coroutine(function*() { 
    try {
       doSomething();
       yield doSomethingAsync();
    } catch (e) {
       // handle error
    }
})();