1# 公共事件发布
2
3
4## 场景介绍
5
6当需要发布某个自定义公共事件时,可以通过[publish()](../../reference/apis-basic-services-kit/js-apis-commonEventManager.md#commoneventmanagerpublish)方法发布事件。发布的公共事件可以携带数据,供订阅者解析并进行下一步处理。
7
8> **须知:**
9> 已发出的粘性公共事件后来订阅者也可以接收到,其他公共事件都需要先订阅再接收,订阅参考[公共事件订阅章节](common-event-subscription.md)。
10
11
12## 接口说明
13
14详细接口见[接口文档](../../reference/apis-basic-services-kit/js-apis-commonEventManager.md#commoneventmanagerpublish)。
15
16| 接口名                                                       | 接口描述                     |
17| ------------------------------------------------------------ | ---------------------------- |
18| publish(event:&nbsp;string,&nbsp;callback:&nbsp;AsyncCallback<void\>) | 发布公共事件。               |
19| publish(event:&nbsp;string,&nbsp;options:&nbsp;[CommonEventPublishData](../../reference/apis-basic-services-kit/js-apis-inner-commonEvent-commonEventPublishData.md),&nbsp;callback:&nbsp;AsyncCallback<void\>) | 指定发布信息并发布公共事件。 |
20
21
22## 发布不携带信息的公共事件
23
24不携带信息的公共事件,只能发布无序公共事件。
25
261. 导入模块。
27
28   ```ts
29   import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
30   import { hilog } from '@kit.PerformanceAnalysisKit';
31
32   const TAG: string = 'ProcessModel';
33   const DOMAIN_NUMBER: number = 0xFF00;
34   ```
35
362. 传入需要发布的事件名称和回调函数,发布事件。
37
38   ```ts
39   // 发布公共事件,其中的event字段需要替换为实际的事件名称。
40   commonEventManager.publish('event', (err: BusinessError) => {
41     if (err) {
42       hilog.error(DOMAIN_NUMBER, TAG, `Publish failed, code is ${JSON.stringify(err.code)}, message is ${JSON.stringify(err.message)}`);
43     } else {
44       //...
45       hilog.info(DOMAIN_NUMBER, TAG, `Publish success`);
46     }
47   });
48   ```
49
50
51## 发布携带信息的公共事件
52
53携带信息的公共事件,可以发布为无序公共事件、有序公共事件和粘性事件,可以通过参数[CommonEventPublishData](../../reference/apis-basic-services-kit/js-apis-inner-commonEvent-commonEventPublishData.md)的isOrdered、isSticky的字段进行设置。
54
551. 导入模块。
56
57   ```ts
58   import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
59   import { hilog } from '@kit.PerformanceAnalysisKit';
60
61   const TAG: string = 'ProcessModel';
62   const DOMAIN_NUMBER: number = 0xFF00;
63   ```
64
652. 构建需要发布的公共事件信息。
66
67   ```ts
68   // 公共事件相关信息
69   let options: commonEventManager.CommonEventPublishData = {
70     code: 1, // 公共事件的初始代码
71     data: 'initial data', // 公共事件的初始数据
72   };
73   ```
74
753. 传入需要发布的事件名称、需要发布的指定信息和回调函数,发布事件。
76
77   ```ts
78   // 发布公共事件,其中的event字段需要替换为实际的事件名称。
79   commonEventManager.publish('event', options, (err: BusinessError) => {
80     if (err) {
81       hilog.error(DOMAIN_NUMBER, TAG, 'PublishCallBack err = ' + JSON.stringify(err));
82     } else {
83       //...
84       hilog.info(DOMAIN_NUMBER, TAG, 'Publish success');
85     }
86   });
87   ```
88