bluebirdjs coroutine错误处理(浏览器)

时间:2016-07-27 16:40:02

标签: javascript error-handling bluebird coroutine

我如何处理蓝鸟协程中的错误?

我在节点中使用了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错误混乱变成更好的解决方案,我会非常感激。

1 个答案:

答案 0 :(得分:0)

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

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

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