【发布时间】:2016-06-09 23:42:05
【问题描述】:
我有这样的代码:
exports.listSavedThreads = function (req, res) {
SavedThread.find({}).exec().then(function (data) {
wat.map();
res.render('home/listSavedThreads');
});
};
wat 是未定义的变量,所以上面的代码不起作用,res.render() 从未被调用,但没有任何东西打印到控制台,它静默失败,浏览器卡在无休止的加载中。
如果我在没有承诺的情况下做同样的事情:
exports.listSavedThreads = function (req, res) {
wat.map();
res.render('home/listSavedThreads');
};
和往常一样,错误正在打印到控制台和浏览器。
我能够打印错误的唯一方法是使用try/catch:
exports.listSavedThreads = function (req, res) {
SavedThread.find({}).exec().then(function (data) {
try {
wat.map();
res.render('home/listSavedThreads');
} catch(e) {
console.log('Error: ', e);
}
});
};
然后在控制台中我看到:
Error: [ReferenceError: wat is not defined]
显然,我不能将try/catch 放入每个操作中,因为我主要需要错误输出来进行开发,所以我可以看到我的拼写错误和类似的东西。有没有办法输出所有操作的错误,甚至是异步的?
【问题讨论】:
-
您正确使用了 try/catch。如果您的设计要求您一遍又一遍地编写相同的代码,您可能会考虑功能故障,或者如果您挖掘 OO,使用多态也可能会清理它。
-
@NathanielJohnson,将
try/catch放入我编写的每个异步函数中都会产生一些开销,如果我只需要错误日志记录。浏览器在 Promise 中打印错误就好了,为什么 Node 不能呢?我想,我的配置可能有问题,但我不知道去哪里找。
标签: javascript node.js express asynchronous error-handling