【发布时间】:2015-12-23 06:19:53
【问题描述】:
我有以下代码:-
try {
user.findOne({ Email: req.body.email }, function (e, d) {
if (d) {
res.json({
'success': false,
'json': null,
'message': 'This email already exists!',
'status': 200
});
} else {
var u = new user();
u.Email = req.body.email;
u.Password = req.body.password;
u.Name = req.body.name;
user.save(function (e, d) {
res.json(d);
});
}
});
} catch (ex) {
console.log(ex.message + " \n" + ex.stack);
res.json({
'success': false,
'json': ex,
'message': 'Opps! something wen wrong please try again later!',
'status': 500
});
}
}
我在user.save(function (e, d) { 线上有一个异常,我解决了这个问题,但问题是我看到 catch 块根本没有触发,并且节点服务器由于异常而停止。如果我将 try 块放入 user.findOne catch 块将被触发,谁能解释我为什么在节点应用程序中出现这种行为?
谢谢你!
【问题讨论】:
-
不,不是。基本上,原因是
try-catch范围没有涵盖回调函数(带有user.save行)。您应该使用.catch方法(或捕获失败承诺的替代方法)。 -
@raina77ow 是对的,如果放置在 try 中的一段代码异步执行,则不会触发 try catch。例如,超时的效果相同。
-
这是一种可能的方式,但不太方便。相反,我建议你承诺你的异步代码。
-
@raina77ow 我应该使用这个npmjs.com/package/q 库还是有更好的选择?
标签: javascript node.js try-catch