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

bluebirdjs coroutine error handling (browser)

本文关键字:浏览器 处理 错误 程序 bluebirdjs      更新时间:2023-09-26

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

我在节点中使用co-in已经有一段时间了,它具有很好的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

我的意思是:试试,catch终于嵌套在协同程序中了?我承认,我甚至在一些日常生活中遵循了这个建议,但我似乎并不正确。Promises和coroutines的全部目的是消除丑陋的过度嵌套,回调已经创建了这些嵌套,现在呢?我们又来了?

请注意,如果有人知道如何将bluebirdjs错误混乱转化为更好的解决方案,我将不胜感激。

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

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

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