软件下载 | 资讯教程 | 最近更新 | 下载排行 | 一键转帖 | 发布投稿
您的位置:最火下载站 > 设计在线 > 媒体动画 > Flash As2 出现 throw error 异常的问题

Flash As2 出现 throw error 异常的问题

前几天在调试一个AS2跟后台通信的程序,一直看不到正常的数据显示,然后就挨行trace,终于发现问题所在了.
原来是用了AS2的一个JSON类,如果格式不是json格式就会抛出异常,因为我们的数据格式不会错的,要么就没有数据,否则不会出现格式错误的,所有就没有try catch.
刚好这次测试的时候有一个元素里没有数据,json串为""(空字符串).然后解析的时候抛了个异常,我没有捕获,就终止那段程序.
请看AS2的JSON里抛异常的方式:

function error(m) {
throw {
name: 'JSONError',
message: m,
at: at - 1,
text: text
};
}
这里直接抛出一个Object而不是Error类的实例, 然而AS2的异常提示跟AS3不同.
AS3:
在装有debug flashplayer的浏览器里弹出一个窗口提示错误.
在IDE的output面板里显示类似下面的错误提示.

Error: this is an error!
at _fla::MainTimeline/frame1()
AS2:
在装有debug flashplayer的浏览器里不提示任何错误.
在IDE的output面板里仅输出抛出的对象或类型的String形式.

this is an error!
OK,看了这两个不同,再看AS2的JSON抛出异常的方式,它仅仅抛出一个Object对象.
然后Object对象转到String默认是 [object Object] 这样一个字符串的.
当我看到这个字符串输出后,首先想到的是哪里直接输出对象了.根本没有想到会是JSON抛出的异常.
所以问题就很难被发现,最后终于在我一行一行trace下找到原因了

好了,有了上面的经验,我可以定制一些规则,好让问题更容易的被发现.
throw异常的时候一定要抛出Error或者Error的子类的实例.
因为用Error有下列的优势:

Error本身就有toString()方法,我们就不会再为模糊的[object Object]而烦恼了.
AS3的Error还有getStackTrace()方法来追踪错误发生的地点.虽然只能在debug版本里用.
常规我们捕获异常的时候只会判断Error 类似于 catch(err:Error)这样的,但是如果我们不是throw的Error或Error的子类,那么这个异常就不能被捕获.
    相关阅读
    栏目导航
    推荐软件