AS2的异常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的子类,那么这个异常就不能被捕获。
» 转载请注明来源:www.litefeel.com » 《AS2的异常Error》
» 本文链接地址:https://www.litefeel.com/error-in-as2/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/error-in-as2/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
@精思入神
这里有个AS3的JSON类的 http://lite3lib.googlecode.com/files/JSON.as
具体用法在里面有写的 :grin:
请教一个问题:AS2 里面的如何使用 JSON 对象。 原来的作品是AS2的,现在需要从后台取得数据,数据格式是JSON字符串,AS2里面如何将这个字符串转换为JSON对象? 查了一下,都是AS3的例子。其他的范例调试通不过,文献少得可怜。