HarmonyOS 鸿蒙Next:arkts是否有类似ts的捕获Promise中未处理的异常api,类似unhandledrejection

发布于 1周前 作者 bupafengyu 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:arkts是否有类似ts的捕获Promise中未处理的异常api,类似unhandledrejection

window.addEventListener(‘unhandledrejection’, function(event) {
// 这个事件对象有两个特殊的属性:
alert(event.promise); // [object Promise] —— 生成该全局 error 的 promise
alert(event.reason); // Error: Whoops! —— 未处理的 error 对象
}); 


更多关于HarmonyOS 鸿蒙Next:arkts是否有类似ts的捕获Promise中未处理的异常api,类似unhandledrejection的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

5.0canary2版本已实现捕获promise异常:

import errorManager from '[@ohos](/user/ohos).app.ability.errorManager';

import { BusinessError } from '[@ohos](/user/ohos).base';

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Page422 {

[@State](/user/State) message: string = 'Hello World';

aboutToAppear(): void {

console.log("aaaaa-1")

let promise1 = new Promise<boolean>((resolve, reject) => {

resolve(true)

reject(new Error('[uncaught error]Let it reject!!!'));

}).then(() => {

console.log("aaaaa-3")

})

let observer: errorManager.UnhandledRejectionObserver = (reason: Error, promise: Promise<void>) => {

console.log("aaaaa-4")

if (promise === promise1) {

console.log("promise1 is rejected");

}

console.log("reason.name: ", reason.name);

console.log("reason.message: ", reason.message);

if (reason.stack) {

console.log("reason.stack: ", reason.stack);

}

};

try {

errorManager.on('error', observer);

errorManager.on('unhandledRejection', observer);

} catch (paramError) {

let code = (paramError as BusinessError).code;

let message = (paramError as BusinessError).message;

console.error(`error: ${code}, ${message}`);

}

}

build() {

RelativeContainer() {

Text(this.message)

.id('HelloWorld')

.fontSize(50)

.fontWeight(FontWeight.Bold)

.alignRules({

center: { anchor: '__container__', align: VerticalAlign.Center },

middle: { anchor: '__container__', align: HorizontalAlign.Center }

})

.onClick(() => {

let a = new Promise<boolean>((_, reject) => {

reject(new Error('[uncaught error]Let it reject!!!'));

})

a

})

}.height('100%').width('100%')

}

}

更多关于HarmonyOS 鸿蒙Next:arkts是否有类似ts的捕获Promise中未处理的异常api,类似unhandledrejection的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next的arkts(ArkUI TypeScript)框架中,确实提供了类似JavaScript中unhandledrejection的机制来处理Promise中未处理的异常。虽然arkts与TypeScript在语法和特性上高度兼容,但针对Promise未处理异常的处理,arkts并没有直接沿用JavaScript的事件名称,而是采用了其特有的方法。

在arkts中,你可以通过全局的window对象(或在ArkUI的上下文中,可能是其他全局对象)监听Promise的未处理异常。具体方法通常涉及到一个特定的事件名或方法,用于注册一个回调函数,该函数会在Promise被拒绝且没有被捕获时调用。

例如,可能会有一个类似下面的API(注意,以下代码仅为示意,实际API可能有所不同):

window.addEventListener('unhandledPromiseRejection', (event: PromiseRejectionEvent) => {
    console.error('Unhandled Promise Rejection:', event.reason);
});

但请注意,上述代码是基于通用假设,实际使用时,请参考arkts的官方文档或API参考手册来确认正确的事件名称和用法。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部