Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何处理js未主动捕获的异常 #58

Closed
wchrt opened this issue Oct 14, 2020 · 7 comments
Closed

如何处理js未主动捕获的异常 #58

wchrt opened this issue Oct 14, 2020 · 7 comments

Comments

@wchrt
Copy link
Contributor

wchrt commented Oct 14, 2020

目前发现可以主动捕获的异常有:

  1. jsEnv.Eval 相关的js执行异常
  2. jsEnv.Tick 相关的js执行异常

而其他情况发生的异常, 没有找到办法捕获, unity也看不到报错
例如:

  1. 将js方法注册为button的点击事件, 这个js方法如果执行异常, 没地方可以检测到
  2. j某个异步方法内抛出异常, 调用者没有主动catch, 也没地方可以检测到异步方法内部的异常

在浏览器端, 可以监听全局的error事件, 获得这样的异常
在nodejs中, 可以process中的uncaughtException事件, 获得这样的异常

请问puerts如何捕获这种异常

@chexiongsheng
Copy link
Collaborator

“将js方法注册为button的点击事件”,这个会变成c#异常啊。不会看不到报错。
“j某个异步方法内抛出异常”,这个看js的文档,可以catch,demo也有例子。

@wchrt
Copy link
Contributor Author

wchrt commented Oct 15, 2020

很多业务开发不会去主动写catch的, 例如有个async func(){ throw new Error(); } 业务上就调用了了 func(); 没有去await也没有去.catch(). 就算上层有try或.catch(), 也不会拿到这个异常的嘛, 这样这个异常就没地方可捕获. 浏览器可以通过全局的error事件捕获到这个异常, nodejs可以通过uncaughtException捕获到

@wchrt
Copy link
Contributor Author

wchrt commented Oct 15, 2020

将js方法注册为button的点击事件, 如果注册的是一个async方法, 那么是不会变为C#异常的, 看不到报错. 注册同步方法是没问题的.
这问题和上面的一样, 异步执行的方法没有主动捕获就拿不到异常.

@chexiongsheng
Copy link
Collaborator

那归根到底还是异步方法的异常。
异步方法必须这样catch,这是js的规范,我不可能改这点的,只能你们去适应了。

@wchrt
Copy link
Contributor Author

wchrt commented Oct 15, 2020

在浏览器和nodejs上, 都能拿到没有catch的异常呢.
说真的, 业务开发要按照规范编写catch非常痛苦, 很多场景都是不关心异常, 但出现异常又能被知晓

@chexiongsheng
Copy link
Collaborator

也对,我加下unhandledRejection的支持

@chexiongsheng
Copy link
Collaborator

支持unhandledRejection了,使用上可以先参考ut用例:https://github.com/Tencent/puerts/blob/master/unity/general/Src/UnitTest/UnitTest.cs#L951

@wchrt wchrt closed this as completed Nov 20, 2020
zombieyang added a commit to zombieyang/puerts that referenced this issue Sep 8, 2024
fix: 限制代码只在 webgl 下生效,否则 ios 上会奔溃
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants