diff --git a/zh-cn/application-dev/arkts-utils/Readme-CN.md b/zh-cn/application-dev/arkts-utils/Readme-CN.md index 8375b97687b906d24c032ae69e9594548ff368a3..20fe06d3bd25694be6530b19500f17d8b200ed10 100644 --- a/zh-cn/application-dev/arkts-utils/Readme-CN.md +++ b/zh-cn/application-dev/arkts-utils/Readme-CN.md @@ -86,6 +86,7 @@ - [静态方式加载native模块](arkts-import-native-module.md) - [基于Node-API加载模块](load-module-base-nodeapi.md) - [模块加载副作用及优化](arkts-module-side-effects.md) + - [ArkTS运行时常见问题](arkts-runtime-faq.md) - ArkTS编译工具链 - [ArkTS编译工具链概述](compilation-tool-chain-overview.md) - 方舟字节码 diff --git a/zh-cn/application-dev/arkts-utils/arkts-runtime-faq.md b/zh-cn/application-dev/arkts-utils/arkts-runtime-faq.md new file mode 100644 index 0000000000000000000000000000000000000000..18d62cd999dc54d0f666835668b0898d3ee92da1 --- /dev/null +++ b/zh-cn/application-dev/arkts-utils/arkts-runtime-faq.md @@ -0,0 +1,142 @@ +# ArkTS运行时常见问题 + +## 方舟正则运算与预期输出结果不一致场景 + +如果使用方舟正则运算时结果与期望不符,请检查以下场景。 + +1. **方舟正则运算对于\b处理与预期不一致**。 + + ```ts + let str = "\u2642"; + let res = str.replace(/\b/g, "/"); + console.log(res); + // 期望输出: ♂ + // 实际输出: /♂/ + ``` + + 规避方案:暂无。 + +2. **方舟正则运算对于/(?<=ab(?=c)cd)ef/处理与预期不一致**。 + + ```ts + console.log("abcdef".match(/(?<=ab(?=c)cd)ef/)); + // 期望输出: ef + // 实际输出: null + ``` + + 规避方案:使用/(?<=abcd)ef/代替/(?<=ab(?=c)cd)ef/。 + +3. **方舟正则运算对于大小写的处理与预期不一致**。 + + ```ts + let res = /\u{10400}/ui.test("\u{10428}"); + console.log(res); + // 期望输出: true + // 实际输出: false + ``` + + 规避方案:暂无。 + +4. **方舟正则运算/()/ug匹配时lastIndex与预期不一致**。 + + ```ts + var L = "\ud800"; + var T = "\udc00"; + var x = "x"; + var u = /()/ug; + u.lastIndex = 1; + u.exec(L + T + L + T); + console.log(u.lastIndex); + // 期望输出: 0 + // 实际输出: 1 + ``` + + 规避方案:暂无。 + +5. **方舟正则运算[]内部使用'-'与预期不一致**。 + + ```ts + let str = "a-b"; + let reg = /[+-\s]/; + console.log(reg.exec(str)); + // 期望输出: - + // 实际输出: null + ``` + + 规避方案:使用转义后的"-"。 + ```ts + let str = "a-b"; + let reg = /[+\-\s]/; + console.log(reg.exec(str)); + ``` + +6. **方舟正则运算具名捕获组获取与预期不一致**。 + + ```ts + let reg = new RegExp("(a)(?b)"); + let res = reg.exec("ab"); + console.log(JSON.stringify(res?.groups)); + // 期望输出: {"b":"b"} + // 实际输出: {"b":"a"} + ``` + + 规避方案:计算具名捕获组位置获取具名捕获组匹配的内容。 + + ```ts + let reg = new RegExp("(a)(?b)"); + let res = reg.exec("ab"); + console.log(JSON.stringify(res[2])); + ``` + +7. **方舟正则匹配使用'|'与预期不一致**。 + + 在使用正则匹配时,如果'|'前是一个空匹配,会导致'|'后的匹配不成功。 + + ```ts + let reg = /a(?:|x)$/; + let res = reg.exec("ax"); + console.log(JSON.stringify(res)); + // 期望输出: ["ax"] + // 实际输出: null + ``` + + 规避方案:使用reg2或reg3替换reg1。 + + ```ts + let reg1 = /a(?:|x)$/; + let reg2 = /a(?:x)?$/; + let reg3 = /a(?:x){0,1}$/; + ``` + +## Async函数内部异常的处理机制 + +**场景** + +如果在Async函数内部产生了异常,且没有使用catch捕获该异常,在ArkTS中不会产生jscrash使进程退出。其本质是Async函数返回了一个rejected状态的Promise对象,没有被处理(handled),使得Promise的rejected状态没有被捕获。Async函数内部的异常会变成 unhandledRejection,表现为异常未抛出。 + +**Async函数内部异常的捕获方式** + +1. 使用[errorManager.on()](../reference/apis-ability-kit/js-apis-app-ability-errorManager.md#errormanageronerror)捕获到Async函数产生的unhandledrejection事件,再通过编写errorManager.on()注册的回调函数,来进行异常处理操作。 + + ```ts + errorManager.on("unhandledRejection", (a:ESObject, b:Promise) => { + console.log("Async test", a); + }) + ``` + +2. 在Async函数内部,针对可能发生异常的代码块添加try-catch逻辑,直接捕获可能出现的异常。 + +> **注意:** +> +> 注意必须在Async函数内部,外部无法捕获Async函数内部的异常,外部只能通过errorManager.on()监听。 + + +**查看Async函数内部是否有异常的方式** + +倘若开发者仅需要查看Async函数内部是否产生异常,首先需要在DevEco Studio终端执行以下hilog命令开启debug级别日志打印: + +```shell + hilog -b D +``` + +然后点击DevEco Studio下方HiLog选项卡,输入过滤条件“Throw error:”,即可查看到Async函数内产生的异常信息。 \ No newline at end of file diff --git a/zh-cn/application-dev/website.md b/zh-cn/application-dev/website.md index d31f11096f515257cf962c6adf1bbbc0853e2a36..3ad6bdd828655be1ce67cb2f999c7f1cbc0c96bf 100644 --- a/zh-cn/application-dev/website.md +++ b/zh-cn/application-dev/website.md @@ -341,6 +341,7 @@ - [静态方式加载native模块](arkts-utils/arkts-import-native-module.md) - [基于Node-API加载模块](arkts-utils/load-module-base-nodeapi.md) - [模块加载副作用及优化](arkts-utils/arkts-module-side-effects.md) + - [ArkTS运行时常见问题](arkts-runtime-faq.md) - ArkTS编译工具链 - [ArkTS编译工具链概述](arkts-utils/compilation-tool-chain-overview.md) - 方舟字节码