[Bug]: 播放歌曲时报错SyntaxError: JSON Parse error: Unexpected character,各个音源均出现
VictorSu000 opened this issue · comments
解决方案检查
- 我已阅读常见问题(https://lyswhut.github.io/lx-music-doc/mobile/faq),并没有找到解决方案
- 我已搜索issue列表(https://github.com/lyswhut/lx-music-mobile/issues?utf8=✓&q=),并没有发现类似的问题
预期行为
无报错
实际行为
播放一首新的歌曲时报错:SyntaxError: JSON Parse error: Unexpected character: o, js engine: hermes
具体出现在 src\utils\nativeModules\userApi.ts
onScriptAction
函数,if (event.data) event.data = JSON.parse(event.data as string)
处。在这个代码前打印event,先后出现了以下log。
{"action": "response", "data": "{\"requestKey\":\"request__9771679874510859\",\"status\":false,\"errorMessage\":\"Fail\"}"}
{"action": "response", "data": {"errorMessage": "Fail", "requestKey": "request__9771679874510859", "status": false}}
ERROR SyntaxError: JSON Parse error: Unexpected character: o, js engine: hermes
{"action": "request", "data": "{\"requestKey\":\"0.03702192998451315\",\"url\":\"http://******\",\"options\":{\"method\":\"GET\",\"headers\":{\"User-Agent\":\"lx-music/mobile\",\"ver\":\"2.0.0\",\"source-ver\":\"1\",\"tag\":\"5b0a20223238323433353439222c0a20223132386b220a5d\"},\"binary\":false}}"}
{"action": "request", "data": {"options": {"binary": false, "headers": [Object], "method": "GET"}, "requestKey": "0.03702192998451315", "url": "http://*****"}}
ERROR SyntaxError: JSON Parse error: Unexpected character: o, js engine: hermes
JSON.parse
报错是因为 event.data
已经是object了并不是string。而且出现这个报错时,前一条event内容和这一条event很类似。
报错场景:
- 编译后的apk在bluestacks模拟器安装后,首次运行时发生
- npm run dev过程中,多次按 a 加载apk时可能触发,按 r 进行reload可能报错又会消失,没有找到稳定复现途径。但一旦该报错出现后,每播放一首歌曲都会稳定报错
我针对个人特殊需求进行过部分功能的小修改,但应该没动过native modules消息传递这块。如果其他人没法复现的话那我就不管了。我自己补了一个判断,仅当event.data
为字符串时才进行JSON.parse
Lx Music 版本
master分支
最后正常的版本
No response
操作系统版本
模拟器 Pixel_3a _API_34_extension_level_7_x86_64
附加信息
No response
理论上 data
永远为 string
:
你这个问题我从来没遇到,若能从仓库克隆的代码重现,可以看看安卓 logcat 的日志输出
未能复现,可能是我自己的问题,但我搜自己的代码并没有任何对event的调用或处理,奇怪了……我先close吧,谢谢作者啦~