所以最近生成器在 NodeJS 中出现了,我可以做类似的事情:
Promise.coroutine(function *(query){
var handle = yield db.connect(Settings.connectionString); //async, returns promise
var result = yield db.query(query); // async, returns promise
return result;
});
现在生成器很棒,因为它们让我在 JS 中执行 async/await。我真的很喜欢能够做到这一点。
但是,出现了一个问题。生成器使用 try/catch 块,所以假设我的代码如下所示:
Promise.coroutine(function *(){
try{
var db = yield DBEngine.open("northwind"); // returns promise
var result = yield db.query("SELECT name FROM users"); // returns promise
return res;
} catch (e){
//code to handle exception in DB query
}
});
(注意,Promise.coroutine 来自bluebird)
注意到错误了吗?然而,有一个参考错误——catch 会吞下它。
当我在 95% 的情况下使用 try/catch 时,我想要捕捉的是逻辑错误和 I/O 错误,而不是语法或类型错误。我想非常非常清楚这些。回调使用err
第一个参数,在生成器中我不确定替代品是什么。
如何处理 JavaScript 生成器代码中的异常处理?
一个好的解决方案可以让我保留堆栈跟踪。