IO.js Errors

上传人:豆浆 文档编号:11092226 上传时间:2017-09-02 格式:PDF 页数:9 大小:216.10KB
返回 下载 相关 举报
IO.js Errors_第1页
第1页 / 共9页
IO.js Errors_第2页
第2页 / 共9页
IO.js Errors_第3页
第3页 / 共9页
IO.js Errors_第4页
第4页 / 共9页
IO.js Errors_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《IO.js Errors》由会员分享,可在线阅读,更多相关《IO.js Errors(9页珍藏版)》请在金锄头文库上搜索。

1、IO.js Errorsio.js成的错误分为两类:JavaScript错误和系统错误。所有的错误都继承于JavaScript的Error类,或就是它的实例。并且都少提供这个类中可的属性。当个操作因为语法错误或语运时级别(language-runtime-level)的原因不被允许时,个JavaScript error会被成并抛出个异常。如果个操作因为系统级别(system-level)限制不被允许时,个系统错误会被成。客户端代码接着会根据API传播它的式来被给予捕获这个错误的机会。API被调的风格决定了成的错误如何回送(handed back),传播给客户端。这反过来告诉客户端如何捕获它们。

2、异常可以通过try / catch结构捕获;其他的捕获式请参阅下。JavaScript错误JavaScript错误表API被错误的使了,或者正在写的程序有问题。Class: Error个普通的错误对象。和其他的错误对象不同,Error实例不指任何 为什么错误发 的原因。Error在它们被实例化时,会记录下“堆栈追踪”信息,并且可以会提供个错误描述。注意:io.js会将系统错误以及JavaScript错误都封装为这个类的实例。new Error(message)实例化个新的Error对象,并且提供的message设置它的.message属性。它的.stack属性将会描述new Error被调时程

3、序的这刻。堆栈追踪信息属于V8堆栈追踪API。堆栈追踪信息只延伸到同步代码执的开始,或Error.stackTraceLimit给出的帧数(number of frames),这取决于哪个更。error.message个在Error()实例化时被传递的字符串。这个信息会出现在堆栈追踪信息的第。改变这个值将不会改变堆栈追踪信息的第。error.stack这个属性返回个代表错误被实例化时程序运的那个点的字符串。个堆栈追踪信息例:Error: Things keep happening!at /home/gbusey/file.js:525:2at Frobnicator.refrobulate (

4、/home/gbusey/business-logic.js:424at Actor. (/home/gbusey/actors.js:400:8)at increaseSynergy (/home/gbusey/actors.js:701:6)第被格式化为: ,然后是系列的堆栈信息帧(以“at”开头)。每帧都描述了个最终导致错误成的次调的地点。V8会试图去给出每个函数的名字(通过变量名,函数名或对象法名),但是也有可能它找不到个合适的名字。如果V8不能为函数定义个名字,那么那帧只会展出位置信息。否则,被定义的函数名会显在位置信息之前。帧只会由JavaScript函数成。例如,如果在个Java

5、Script函数,同步执了个叫cheetahify的C+ addon函数,那么堆栈追踪信息中的帧将不会有cheetahify调:var cheetahify = require(./native-binding.node);function makeFaster() / cheetahify *synchronously* calls speedy.cheetahify(function speedy() throw new Error(oh no!););makeFaster(); / will throw:/ /home/gbusey/file.js:6/ throw new Error(

6、oh no!);/ / Error: oh no!/ at speedy (/home/gbusey/file.js:6:11)/ at makeFaster (/home/gbusey/file.js:5:3)/ at Object. (/home/gbusey/file.js:10:1)/ at Module._compile (module.js:456:26)/ at Object.Module._extensions.js (module.js:474:10)/ at Module.load (module.js:356:32)/ at Function.Module._load (

7、module.js:312:12)/ at Function.Module.runMain (module.js:497:10)/ at startup (node.js:119:16)/ at node.js:906:3位置信息将会是以下之:native,如果帧代表了向V8内部的次调(如在.forEach中)。plain-filename.js:line:column,如果帧代表了向io.js内部的次调。/absolute/path/to/file.js:line:column,如果帧代表了向户程序或其依赖的次调。关键的点是,代表了堆栈信息的字符串只在需要被使时成,它是惰性成的。堆栈信息的帧

8、数由 Error.stackTraceLimit 或 当前事件循环的tick可的帧数 中的决定。系统级别错误被作为增强的Error实例成,参阅下。Error.captureStackTrace(targetObject, constructorOpt)为targetObject创建个.stack属性,它代表了Error.captureStackTrace被调时,在程序中的位置。var myObject = ;Error.captureStackTrace(myObject);myObject.stack / similar to new Error().stack追踪信息的第,将是target

9、Object.toString()的结果,不是个带有ErrorType:前缀的信息。可选的constructorOpt接收个函数。如果指定,所有constructorOpt以上的帧,包括constructorOpt,将会被成的堆栈追踪信息忽略。这对于向最终户隐藏实现细节分有。个普遍的使这个参数的例:function MyError() Error.captureStackTrace(this, MyError);/ without passing MyError to captureStackTrace, the MyError/ frame would should up in the .s

10、tack property. by passing/ the constructor, we omit that frame and all frames above it.new MyError().stackError.stackTraceLimit个决定了堆栈追踪信息的堆栈帧数的属性(不论是由new Error().stack或由Error.captureStackTrace(obj)成)。初始值是10。可以被设置为任何有效的JavaScript数字,当值被改变后,就会影响所有的堆栈追踪信息的获取。如果设置为个数字值,堆栈追踪将不会获取任何帧,并且会在要使时报告undefined。Cla

11、ss: RangeError个Error类,表明了为个函数提供的参数没有在可接受的值的范围之内;不论是在个数字范围之外,或是在个参数指定的参数集合范围之外。例:require(net).connect(-1); / throws RangeError, port should be 0 & )注意,try catch(err) 不能捕获异步API成的错误。个初学者的常见错误是尝试在Node风格的回调函数中抛出错误:/ THIS WILL NOT WORK:var fs = require(fs);try fs.readFile(/some/file/that/does-not-exist, f

12、unction(err, data/ mistaken assumption: throwing here.if (err) throw err;); catch(err) / . will be caught here - this is incorrect!console.log(err); / Error: ENOENT这将不会正常运!在Node风格的回调函数执时,外围的代码try catch(err) )已经退出了。在多数情况,在Node风格的回调函数内部抛出错误会使进程挂掉。如果启了domain,它们可以捕获了被抛出的错误;相似的,如果给process.on(uncaughtExce

13、ption)添加了监听器,那么它也将会捕获错误。错误事件另个提供错误的机制是error事件。这常被在基于流或基于event emitter的API中,它们就代表了系列的异步操作(每个单的操作都可能成功或失败)。如果在错误的源头没有添加error事件的监听器,那么error会被抛出。此时,进程会因为个未处理的异常挂掉,除提供了合适的domains,或监听了process.on(uncaughtException)。var net = require(net);var connection = net.connect(localhost);/ adding an error event handl

14、er to a stream:connection.on(error, function(err) / if the connection is reset by the server, or if it cant/ connect at all, or on any sort of error encountered by/ the connection, the error will be sent here.console.error(err););connection.pipe(process.stdout);“当没有没有监听错误时会抛出错误”这个为不仅限与io.js提供的API -

15、户创建的基于流或event emitters的API也会如此。例:var events = require(events);var ee = new events.EventEmitter;setImmediate(function() / this will crash the process because no error event/ handler has been added.ee.emit(error, new Error(This will crash););与Node风格的回调函数相同,这种式产的错误也不能被try catch(err) 捕获 - 它们发时,外围的代码已经退出了。W3Cschool()最的技术知识分享与学习平台此篇内容来于站户上传并发布。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号