为什么node.js不能捕捉到我的错误?
How come node.js doesn't catch my errors?
var api_friends_helper = require('./helper.js');
try{
api_friends_helper.do_stuff(function(result){
console.log('success');
};
}catch(err){
console.log('caught error'); //this doesn't hit!
}
在do_stuff
中,我有:
function do_stuff(){
//If I put the throw here, it will catch it!
insert_data('abc',function(){
throw new Error('haha');
});
}
为什么它从不记录'捕获错误'?相反,它将堆栈跟踪和错误对象打印到屏幕上:
{ stack: [Getter/Setter],
arguments: undefined,
type: undefined,
message: 'haha' }
Error: haha
at /home/abc/kj/src/api/friends/helper.js:18:23
at /home/abc/kj/src/api/friends/db.js:44:13
at Query.<anonymous> (/home/abc/kj/src/node_modules/mysql/lib/client.js:108:11)
at Query.emit (events.js:61:17)
at Query._handlePacket (/home/abc/kj/src/node_modules/mysql/lib/query.js:51:14)
at Client._handlePacket (/home/abc/kj/src/node_modules/mysql/lib/client.js:312:14)
at Parser.<anonymous> (native)
at Parser.emit (events.js:64:17)
at /home/abc/kj/src/node_modules/mysql/lib/parser.js:71:14
at Parser.write (/home/abc/kj/src/node_modules/mysql/lib/parser.js:576:7)
请注意,如果我把throw放在do_stuff()之后,那么它将捕获它。
我怎么能让它捕获,即使我把它嵌套在另一个函数?
这是使用NodeJS的缺点之一。它基本上有两个处理错误的方法;一种是通过使用try/catch块,另一种是通过将每个回调函数的第一个参数作为错误传递。
问题在于事件循环异步模型。你可以使用'uncaughtException'事件来捕获未捕获的错误,但它已经成为Node.JS中常见的程序范例,使用回调函数的第一个参数来显示是否有任何错误,例如:(我以前从未使用过MySQL与NodeJS,只是做一个一般的例子)
function getUser( username, callback ){
mysql.select("SELECT username from ...", function(err,result){
if( err != null ){
callback( err );
return;
}
callback( null, result[0]);
});
}
getUser("MyUser", function(err, user){
if( err != null )
console.log("Got error! ", err );
else
console.log("Got user!");
});
相关文章:
- 闭包编译器--调试解决了我的错误
- 有人能发现我的错误吗(自动完成文本框)
- Java脚本,需要帮助查找我的错误
- 从引导框架发送电子邮件 我的错误是我收到一条消息是邮件已成功发送,但我没有收到任何邮件
- 为什么我的猫头鹰旋转木马在我的第一组中不起作用?请问我的错误在哪里
- 显示/隐藏马尔坎 有人指出我的错误
- 我的错误处理程序如何优先于早期的中间件
- Javascript:奇数或偶数脚本找不到我的错误
- 我打开新窗口的代码没有效果.有人能认出我的错误吗
- 什么'这是我的错误代码
- Javascript-我可以'我没有发现我的错误.(单选按钮)
- 从属YII输入框?我的错误在哪里?如何在dropDownList中添加Onchange事件?而无需使用控制器
- 可以't删除事件侦听器,不理解我的错误
- 为什么我的错误消息不起作用
- IE兼容模式阻止我得到我的错误信息
- 为什么node.js不能捕捉到我的错误?
- 不能找到我的错误在我的HTML代码,为javascript测验
- 哪里是我的错误使用JavaScript和jQuery
- 我的错误在哪里?未捕获的SyntaxError: missing)参数列表后
- AngularJS -当触发器变量在作用域中改变时,我的错误消息不会更新