• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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