1# @ohos.app.ability.errorManager (错误管理模块) 2 3<!--Kit: Performance Analysis Kit--> 4<!--Subsystem: HiviewDFX--> 5<!--Owner: @rr_cn--> 6<!--Designer: @peterhuangyu--> 7<!--Tester: @gcw_KuLfPSbe--> 8<!--Adviser: @foryourself--> 9 10ErrorManager模块提供对错误观测器的注册和注销的能力,主要是观测应用发生js crash和appfreeze等错误。 11 12> **说明**: 13> 14> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 15 16## 导入模块 17```ts 18import { errorManager } from '@kit.AbilityKit'; 19``` 20 21## errorManager.on('error') 22 23on(type: 'error', observer: ErrorObserver): number 24 25注册错误观测器。注册后可以捕获到应用产生的js crash,属于应用崩溃的一种。观测器捕获到该异常时应用不退出,建议在回调函数执行完后,增加同步退出操作。 26 27仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 28 29**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 30 31**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 32 33**参数**: 34 35| 参数名 | 类型 | 必填 | 说明 | 36| -------- | -------- | -------- | -------- | 37| type | string | 是 | 填写'error',表示错误观测器。 | 38| observer | [ErrorObserver](js-apis-inner-application-errorObserver.md) | 是 | 错误观测器。 | 39 40**返回值**: 41 42 | 类型 | 说明 | 43 | -------- | -------- | 44 | number | 观测器的索引值,与观测器一一对应。可用于`errorManager.off`函数中的`observerId`参数。 | 45 46**错误码**: 47 48以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 49 50| 错误码ID | 错误信息 | 51| ------- | -------- | 52| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 53| 16000003 | The specified ID does not exist. | 54 55**示例**: 56 57```ts 58import { errorManager } from '@kit.AbilityKit'; 59import { BusinessError } from '@kit.BasicServicesKit'; 60 61let observer: errorManager.ErrorObserver = { 62 onUnhandledException(errorMsg) { 63 console.info('onUnhandledException, errorMsg: ', errorMsg); 64 }, 65 onException(errorObj) { 66 console.info('onException, name: ', errorObj.name); 67 console.info('onException, message: ', errorObj.message); 68 if (typeof(errorObj.stack) === 'string') { 69 console.info('onException, stack: ', errorObj.stack); 70 } 71 } 72}; 73let observerId = -1; 74 75try { 76 observerId = errorManager.on('error', observer); 77} catch (paramError) { 78 let code = (paramError as BusinessError).code; 79 let message = (paramError as BusinessError).message; 80 console.error(`error: ${code}, ${message}`); 81} 82``` 83 84## errorManager.on('globalErrorOccurred')<sup>18+</sup> 85 86on(type: 'globalErrorOccurred', observer: GlobalObserver): void 87 88在进程中的任意线程中注册 `errormanager.on` 接口,监听整个进程中任意线程的异常。观测器捕获到该异常时应用不退出,建议在回调函数执行完后,增加同步退出操作。 89 90**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 91 92**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 93 94**参数**: 95 96| 参数名 | 类型 | 必填 | 说明 | 97| -------- | -------- | -------- | -------- | 98| type | string | 是 | 填写'globalErrorOccurred',表示错误观测器。 | 99| observer | [GlobalObserver](#globalobserver18) | 是 | 自定义异常处理回调函数。 | 100 101**错误码**: 102 103以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 104 105| 错误码ID | 错误信息 | 106| ------- | -------- | 107| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 108| 16200001 | The caller has been released. | 109 110**示例**: 111 112```ts 113import { errorManager } from '@kit.AbilityKit'; 114import { BusinessError } from '@kit.BasicServicesKit'; 115 116function errorFunc(observer: errorManager.GlobalError) { 117 console.info("result name :" + observer.name); 118 console.info("result message :" + observer.message); 119 console.info("result stack :" + observer.stack); 120 console.info("result instanceName :" + observer.instanceName); 121 console.info("result instanceType :" + observer.instanceType); 122} 123 124try { 125 errorManager.on('globalErrorOccurred', errorFunc); 126} catch (paramError) { 127 let code = (paramError as BusinessError).code; 128 let message = (paramError as BusinessError).message; 129 console.error(`error: ${code}, ${message}`); 130} 131``` 132 133## errorManager.off('globalErrorOccurred')<sup>18+</sup> 134 135off(type: 'globalErrorOccurred', observer?: GlobalObserver): void 136 137注销错误观测器,注销之前注册在同一线程的callback全局监听。 138 139如果传入的回调不在通过on方法注册的回调队列中,将抛出16300004错误码,因此建议使用try-catch逻辑进行处理。 140 141**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 142 143**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 144 145**参数**: 146 147| 参数名 | 类型 | 必填 | 说明 | 148| -------- | -------- | -------- | -------- | 149| type | string | 是 | 填写'globalErrorOccurred',表示错误观测器。 | 150| observer | [GlobalObserver](#globalobserver18) | 否 | 由on方法注册的callback。建议使用该参数,缺省时默认清除所有通过on注册的相同env的callback,否则删除指定callback。 | 151 152**错误码**: 153 154以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 155 156| 错误码ID | 错误信息 | 157| ------- | -------- | 158| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 159| 16200001 | The caller has been released. | 160| 16300004 | The observer does not exist. | 161 162**示例**: 163 164```ts 165import { errorManager } from '@kit.AbilityKit'; 166import { BusinessError } from '@kit.BasicServicesKit'; 167 168function errorFunc(observer: errorManager.GlobalError) { 169 console.info("result name :" + observer.name); 170 console.info("result message :" + observer.message); 171 console.info("result stack :" + observer.stack); 172 console.info("result instanceName :" + observer.instanceName); 173 console.info("result instanceType :" + observer.instanceType); 174} 175 176try { 177 errorManager.off('globalErrorOccurred', errorFunc) 178} catch (paramError) { 179 let code = (paramError as BusinessError).code; 180 let message = (paramError as BusinessError).message; 181 console.error(`error: ${code}, ${message}`); 182} 183``` 184 185## errorManager.off('error') 186 187off(type: 'error', observerId: number, callback: AsyncCallback\<void>): void 188 189注销错误观测器。使用callback异步返回。 190 191仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 192 193**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 194 195**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 196 197**参数**: 198 199| 参数名 | 类型 | 必填 | 说明 | 200| -------- | -------- | -------- | -------- | 201| type | string | 是 | 填写'error',表示错误观测器。 | 202| observerId | number | 是 | 由on方法返回的观测器的index值。 | 203| callback | AsyncCallback\<void> | 是 | 表示指定的回调方法。 | 204 205**错误码**: 206 207以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 208 209| 错误码ID | 错误信息 | 210| ------- | -------- | 211| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 212| 16000003 | The specified ID does not exist. | 213 214**示例**: 215 216```ts 217import { errorManager } from '@kit.AbilityKit'; 218import { BusinessError } from '@kit.BasicServicesKit'; 219 220let observerId = 100; 221 222function unregisterErrorObserverCallback(err: BusinessError) { 223 if (err) { 224 console.error('------------ unregisterErrorObserverCallback ------------', err); 225 } 226} 227 228try { 229 errorManager.off('error', observerId, unregisterErrorObserverCallback); 230} catch (paramError) { 231 let code = (paramError as BusinessError).code; 232 let message = (paramError as BusinessError).message; 233 console.error(`error: ${code}, ${message}`); 234} 235``` 236 237## errorManager.off('error') 238 239off(type: 'error', observerId: number): Promise\<void> 240 241注销错误观测器。使用Promise异步返回。 242 243仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 244 245**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 246 247**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 248 249**参数**: 250 251| 参数名 | 类型 | 必填 | 说明 | 252| -------- | -------- | -------- | -------- | 253| type | string | 是 | 填写'error',表示错误观测器。 | 254| observerId | number | 是 | 由on方法返回的观测器的index值。 | 255 256**返回值**: 257 258| 类型 | 说明 | 259| -------- | -------- | 260| Promise\<void> | Promise对象。无返回结果的Promise对象。 | 261 262**错误码**: 263 264以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 265 266| 错误码ID | 错误信息 | 267| ------- | -------- | 268| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 269| 16000003 | The specified ID does not exist. | 270 271**示例**: 272 273```ts 274import { errorManager } from '@kit.AbilityKit'; 275import { BusinessError } from '@kit.BasicServicesKit'; 276 277let observerId = 100; 278 279try { 280 errorManager.off('error', observerId) 281 .then((data) => { 282 console.info('----------- unregisterErrorObserver success ----------', data); 283 }) 284 .catch((err: BusinessError) => { 285 console.error('----------- unregisterErrorObserver fail ----------', err); 286 }); 287} catch (paramError) { 288 let code = (paramError as BusinessError).code; 289 let message = (paramError as BusinessError).message; 290 console.error(`error: ${code}, ${message}`); 291} 292``` 293 294## errorManager.on('loopObserver')<sup>12+</sup> 295 296on(type: 'loopObserver', timeout: number, observer: LoopObserver): void 297 298注册主线程消息处理耗时监听器。注册后可以捕获到应用主线程处理消息的具体执行时间。 299 300仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 301 302**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 303 304**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 305 306**参数**: 307 308| 参数名 | 类型 | 必填 | 说明 | 309| -------- | -------- | -------- | -------- | 310| type | string | 是 | 填写'loopObserver',表示注册主线程消息处理耗时监听器。 | 311| timeout | number | 是 | 表示事件执行阈值(单位:毫秒)。 阈值必须大于0。 | 312| observer | [LoopObserver](js-apis-inner-application-loopObserver.md) | 是 | 注册主线程消息处理耗时监听器。 | 313 314**错误码**: 315 316以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。 317 318| 错误码ID | 错误信息 | 319| ------- | -------- | 320| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 321 322**示例**: 323 324```ts 325import { errorManager } from '@kit.AbilityKit'; 326 327let observer: errorManager.LoopObserver = { 328 onLoopTimeOut(timeout: number) { 329 console.info('Duration timeout: ' + timeout); 330 } 331}; 332 333errorManager.on("loopObserver", 1, observer); 334``` 335 336## errorManager.on('globalUnhandledRejectionDetected')<sup>18+</sup> 337 338on(type: 'globalUnhandledRejectionDetected', observer: GlobalObserver): void 339 340在进程中任意线程注册被拒绝promise监听器,注册后可以捕获到当前进程中未被捕获到的promise rejection。 341 342**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 343 344**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 345 346**参数**: 347 348| 参数名 | 类型 | 必填 | 说明 | 349|-----------------------|-------------------------------------------------------------| -------- |------------------------------------------| 350| type | string | 是 | 填写'globalUnhandledRejectionDetected',表示注册被拒绝promise监听器。 | 351| observer | [GlobalObserver](#globalobserver18) | 是 | 注册被拒绝promise的callback。 | 352 353**错误码**: 354 355以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 356 357| 错误码ID | 错误信息 | 358| ------- | -------- | 359| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 360| 16200001 | The caller has been released. | 361 362**示例**: 363 364```ts 365import { errorManager } from '@kit.AbilityKit'; 366 367function promiseFunc(observer: errorManager.GlobalError) { 368 console.info("result name :" + observer.name); 369 console.info("result message :" + observer.message); 370 console.info("result stack :" + observer.stack); 371 console.info("result instanceName :" + observer.instanceName); 372 console.info("result instanceType :" + observer.instanceType); 373} 374 375errorManager.on("globalUnhandledRejectionDetected", promiseFunc); 376// 建议在抛出promise异常时,使用async抛出异常。 377async function throwError() { 378 throw new Error("uncaught error"); 379} 380 381let promise1 = new Promise<void>(() => {}).then(() => { 382 throwError(); 383}); 384``` 385 386## errorManager.on('unhandledRejection')<sup>12+</sup> 387 388on(type: 'unhandledRejection', observer: UnhandledRejectionObserver): void 389 390注册被拒绝promise监听器。注册后可以捕获到当前线程中未被捕获到的promise rejection。 391 392仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 393 394**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 395 396**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 397 398**参数**: 399 400| 参数名 | 类型 | 必填 | 说明 | 401|-----------------------|-------------------------------------------------------------| -------- |------------------------------------------| 402| type | string | 是 | 填写'unhandledRejection',表示注册被拒绝promise监听器。 | 403| observer | [UnhandledRejectionObserver](#unhandledrejectionobserver12) | 是 | 注册被拒绝promise监听器。 | 404 405**错误码**: 406 407以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 408 409| 错误码ID | 错误信息 | 410| ------- | -------- | 411| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 412| 16200001 | The caller has been released. | 413 414**示例**: 415 416```ts 417import { errorManager } from '@kit.AbilityKit'; 418 419let observer: errorManager.UnhandledRejectionObserver = (reason: Error, promise: Promise<void>) => { 420 if (promise === promise1) { 421 console.info("promise1 is rejected"); 422 } 423 console.info("reason.name: ", reason.name); 424 console.info("reason.message: ", reason.message); 425 if (reason.stack) { 426 console.info("reason.stack: ", reason.stack); 427 } 428}; 429 430errorManager.on("unhandledRejection", observer); 431 432let promise1 = new Promise<void>(() => {}).then(() => { 433 throw new Error("uncaught error"); 434}); 435``` 436## errorManager.on('freeze')<sup>18+</sup> 437 438on(type: 'freeze', observer: FreezeObserver): void 439 440注册应用主线程freeze监听。多次注册情况下,取最后一次注册的结果。 441 442仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 443 444> **注意**: 445> 446> 如果该回调函数执行时间超过1s,可能导致[AppRecovery](./js-apis-app-ability-appRecovery.md)功能不可用。通过解析hilog日志中的begin与Freeze callback execution completed两者的时间差可以计算回调函数执行时长,如果超过1秒,可以尝试采用异步处理、减少阻塞操作、优化数据结构等方法优化回调逻辑,降低执行时长。 447> 448 449**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 450 451**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 452 453**参数**: 454 455| 参数名 | 类型 | 必填 | 说明 | 456| -------- | -------- | -------- | -------- | 457| type | string | 是 | 填写'freeze',表示应用主线程freeze观测器。 | 458| observer | [FreezeObserver](#freezeobserver18) | 是 | 由on接口注册的freeze监听的callback。 | 459 460**错误码**: 461 462以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。 463 464| 错误码ID | 错误信息 | 465| ------- | -------- | 466| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 467 468**示例**: 469 470```ts 471import { errorManager } from '@kit.AbilityKit'; 472 473function freezeCallback() { 474 console.info("freezecallback"); 475} 476errorManager.on("freeze", freezeCallback); 477``` 478 479## errorManager.off('loopObserver')<sup>12+</sup> 480 481off(type: 'loopObserver', observer?: LoopObserver): void 482 483注销主线程消息处理监听器。 484 485仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 486 487**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 488 489**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 490 491**参数**: 492 493| 参数名 | 类型 | 必填 | 说明 | 494| -------- | -------- | -------- | -------- | 495| type | string | 是 | 填写'loopObserver',表示应用主线程观测器。 | 496| observer | [LoopObserver](js-apis-inner-application-loopObserver.md) | 否 | 应用主线程观测器标志。 | 497 498**错误码**: 499 500以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。 501 502| 错误码ID | 错误信息 | 503| ------- | -------- | 504| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 505 506**示例**: 507 508```ts 509import { errorManager } from '@kit.AbilityKit'; 510 511errorManager.off("loopObserver"); 512``` 513 514## errorManager.off('globalUnhandledRejectionDetected')<sup>18+</sup> 515 516off(type: 'globalUnhandledRejectionDetected', observer?: GlobalObserver): void 517 518注销被拒绝promise监听器,注销后无法监听进程中的promise异常。 519 520如果传入的回调不在通过on方法注册的回调队列中,将抛出16300004错误码,因此建议使用try-catch逻辑进行处理。 521 522**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 523 524**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 525 526**参数**: 527 528| 参数名 | 类型 | 必填 | 说明 | 529|-----------------------|---------------------------------|----|----------------------------------------------| 530| type | string | 是 | 填写'globalUnhandledRejectionDetected',表示注册被拒绝promise监听器。 | 531| observer | [GlobalObserver](#globalobserver18) | 否 | 由on接口注册的被拒绝promise的callback。建议使用该参数,缺省时默认清除所有通过on注册的相同env的callback,否则删除指定callback。 | 532 533**错误码**: 534 535以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 536 537| 错误码ID | 错误信息 | 538| ------- | -------- | 539| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 540| 16200001 | The caller has been released. | 541| 16300004 | The observer does not exist. | 542 543**示例**: 544 545```ts 546import { errorManager } from '@kit.AbilityKit'; 547 548function promiseFunc(observer: errorManager.GlobalError) { 549 console.info("result name :" + observer.name); 550 console.info("result message :" + observer.message); 551 console.info("result stack :" + observer.stack); 552 console.info("result instanceName :" + observer.instanceName); 553 console.info("result instanceType :" + observer.instanceType); 554} 555 556errorManager.on("globalUnhandledRejectionDetected", promiseFunc); 557 558async function throwError() { 559 throw new Error("uncaught error"); 560} 561 562let promise1 = new Promise<void>(() => {}).then(() => { 563 throwError(); 564}); 565 566errorManager.off("globalUnhandledRejectionDetected", promiseFunc); 567``` 568 569## errorManager.off('unhandledRejection')<sup>12+</sup> 570 571off(type: 'unhandledRejection', observer?: UnhandledRejectionObserver): void 572 573注销被拒绝promise监听器。 574 575仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 576 577**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 578 579**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 580 581**参数**: 582 583| 参数名 | 类型 | 必填 | 说明 | 584|-----------------------|---------------------------------|----|----------------------------------------------| 585| type | string | 是 | 填写'unhandledRejection',表示注册被拒绝promise监听器。 | 586| observer | [UnhandledRejectionObserver](#unhandledrejectionobserver12) | 否 | 注册了被拒绝promise监听器。建议使用该参数,缺省时默认清除所有通过on注册的相同env的observer,否则删除指定observer。 | 587 588**错误码**: 589 590以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 591 592| 错误码ID | 错误信息 | 593| ------- | -------- | 594| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3. Parameter verification failed. | 595| 16200001 | The caller has been released. | 596| 16300004 | The observer does not exist. | 597 598**示例**: 599 600```ts 601import { errorManager } from '@kit.AbilityKit'; 602 603let observer: errorManager.UnhandledRejectionObserver = (reason: Error, promise: Promise<void>) => { 604 if (promise === promise1) { 605 console.info("promise1 is rejected"); 606 } 607 console.info("reason.name: ", reason.name); 608 console.info("reason.message: ", reason.message); 609 if (reason.stack) { 610 console.info("reason.stack: ", reason.stack); 611 } 612}; 613 614errorManager.on("unhandledRejection", observer); 615 616let promise1 = new Promise<void>(() => {}).then(() => { 617 throw new Error("uncaught error") 618}) 619 620errorManager.off("unhandledRejection"); 621``` 622或者 623```ts 624import { errorManager } from '@kit.AbilityKit'; 625 626let observer: errorManager.UnhandledRejectionObserver = (reason: Error, promise: Promise<void>) => { 627 if (promise === promise1) { 628 console.info("promise1 is rejected"); 629 } 630 console.info("reason.name: ", reason.name); 631 console.info("reason.message: ", reason.message); 632 if (reason.stack) { 633 console.info("reason.stack: ", reason.stack); 634 } 635}; 636 637errorManager.on("unhandledRejection", observer); 638 639let promise1 = new Promise<void>(() => {}).then(() => { 640 throw new Error("uncaught error") 641}) 642 643errorManager.off("unhandledRejection", observer); 644``` 645 646## errorManager.off('freeze')<sup>18+</sup> 647 648off(type: 'freeze', observer?: FreezeObserver): void 649 650取消之前注册的应用主线程freeze监听。 651 652仅在主线程中使用。使用线程出错时,将抛出错误码,因此建议使用try-catch逻辑进行处理。 653 654如果传入的回调与通过on方法注册回调不一致,将抛出16300004错误码,因此建议使用try-catch逻辑进行处理。 655 656**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 657 658**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 659 660**参数**: 661 662| 参数名 | 类型 | 必填 | 说明 | 663| -------- | -------- | -------- | -------- | 664| type | string | 是 | 填写'freeze',表示应用主线程freeze观测器。 | 665| observer | [FreezeObserver](#freezeobserver18) | 否 | 由on接口注册的freeze监听的callback。建议使用该参数,如果参数不填会直接清空callback,否则删除指定的callback。 | 666 667**错误码**: 668 669以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 670 671| 错误码ID | 错误信息 | 672| ------- | -------- | 673| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.| 674| 16300004 | The observer does not exist. | 675 676**示例**: 677 678```ts 679import { errorManager } from '@kit.AbilityKit'; 680 681function freezeCallback() { 682 console.info("freezecallback"); 683} 684errorManager.on("freeze", freezeCallback); 685errorManager.off("freeze", freezeCallback); 686``` 687 688## ErrorObserver 689 690type ErrorObserver = _ErrorObserver.default 691 692ErrorObserver模块。 693 694**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 695 696**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 697 698| 类型 | 说明 | 699| --- | --- | 700| [_ErrorObserver.default](js-apis-inner-application-errorObserver.md) | ErrorObserver模块。 | 701 702## LoopObserver<sup>12+</sup> 703 704type LoopObserver = _LoopObserver 705 706LoopObserver模块。定义异常监听,可作为 `errormanager.on` 函数的参数,监听并处理当前应用主线程超时的事件。 707 708**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 709 710**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 711 712| 类型 | 说明 | 713| --- | --- | 714| [_LoopObserver](js-apis-inner-application-loopObserver.md) | LoopObserver模块。 | 715 716## UnhandledRejectionObserver<sup>12+</sup> 717 718type UnhandledRejectionObserver = (reason: Error | any, promise: Promise\<any>) => void 719 720定义异常监听,用于捕获Promise异步操作失败的原因。 721 722**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 723 724**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 725 726**参数**: 727 728| 参数名 | 类型 | 必填 | 说明 | 729|--------|---------------|---| -------- | 730| reason | Error \| any | 是 | 通常是`Error`类型,表示被拒绝的理由。 | 731| promise | Promise\<any> | 是 | 被拒绝的promise。 | 732 733## FreezeObserver<sup>18+</sup> 734 735type FreezeObserver = () => void 736 737定义应用主线程freeze回调,用于应用自定义添加freeze信息。 738 739**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 740 741**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 742 743## GlobalObserver<sup>18+</sup> 744 745type GlobalObserver = (reason: GlobalError) => void 746 747定义异常监听,可以作为[errorManager.on('globalErrorOccurred')](#errormanageronglobalerroroccurred18)和[errorManager.on('globalUnhandledRejectionDetected')](#errormanageronglobalunhandledrejectiondetected18)的入参监听当前应用主线程事件处理事件。 748 749**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 750 751**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 752 753**参数**: 754 755| 参数名 | 类型 | 必填 | 说明 | 756|--------| ------------- | ---- | --- | 757| reason | [GlobalError](#globalerror18) | 是 | 有关异常事件名字、消息、错误堆栈信息、异常线程名称和类型的对象。 | 758 759 760## GlobalError<sup>18+</sup> 761 762有关异常事件名字、消息、错误堆栈信息、异常线程名称和类型的对象。 763 764**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 765 766**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 767 768| 名称 | 类型 | 只读 | 可选 | 说明 | 769| ---- | ----- | ---- | ----- | ------ | 770| instanceName | string | 否 | 否 | 表示虚拟机实例名称。 | 771| instanceType | [InstanceType](#instancetype18) | 否 | 否 | 表示虚拟机的实例类型。 | 772 773## InstanceType<sup>18+</sup> 774 775虚拟机的实例类型。 776 777**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 778 779**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 780 781| 名称 | 值 | 说明 | 782| ---- | --- | ------ | 783| MAIN | 0 | 表示主虚拟机实例。 | 784| WORKER | 1 | 表示工作虚拟机实例。 | 785| TASKPOOL | 2 | 表示任务池虚拟机实例。 | 786| CUSTOM | 3 | 表示用户通过[napi_create_ark_runtime](../native-lib/napi.md#napi_create_ark_runtime)从本机代码创建的虚拟机实例。 | 787