发布公共事件
======

#### 场景介绍

当需要发布某个公共事件时，可以通过[publish()](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-commoneventmanager#commoneventmanagerpublish)方法发布事件。发布的公共事件可以携带数据，供订阅者解析并进行下一步处理。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/30/v3/c5ZWTZkFS129ExurYFw1cg/notice_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073438Z&HW-CC-Expire=86400&HW-CC-Sign=9B6BA4D8049FA28F034AD585C8C1223D9970B6AF4C5F3D4B43ADF31982CC37B3)

已发出的粘性公共事件后来订阅者也可以接收到，其他公共事件都需要先订阅再接收，订阅参考[公共事件订阅章节](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/common-event-subscription)。

#### 接口说明

详细接口见[接口文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-commoneventmanager#commoneventmanagerpublish)。

| 接口名 | 接口描述 |
| :-- | :-- |
| publish(event: string, callback: AsyncCallback<void>) | 发布公共事件。 |
| publish(event: string, options: [CommonEventPublishData](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inner-commonevent-commoneventpublishdata), callback: AsyncCallback<void>) | 指定发布信息并发布公共事件。 |

#### 发布不携带信息的公共事件

不携带信息的公共事件，只能发布无序公共事件。

1.  导入模块。
    
    import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    
    const TAG: string = 'ProcessModel';
    const DOMAIN\_NUMBER: number = 0xFF00;
    
2.  传入需要发布的事件名称和回调函数，发布事件。
    
    // 发布公共事件，其中的event字段需要替换为实际的事件名称。
    commonEventManager.publish('event', (err: BusinessError) => {
      if (err) {
        hilog.error(DOMAIN\_NUMBER, TAG,
          \`Publish failed, code is ${JSON.stringify(err.code)}, message is ${JSON.stringify(err.message)}\`);
      } else {
        // ...
        hilog.info(DOMAIN\_NUMBER, TAG, \`Publish success\`);
      }
    });
    

#### 发布携带信息的公共事件

携带信息的公共事件，可以发布为无序公共事件、有序公共事件和粘性事件，可以通过参数[CommonEventPublishData](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inner-commonevent-commoneventpublishdata)的isOrdered、isSticky的字段进行设置。

1.  导入模块。
    
    import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    
    const TAG: string = 'ProcessModel';
    const DOMAIN\_NUMBER: number = 0xFF00;
    
2.  构建需要发布的公共事件信息。
    
    // 公共事件相关信息
    let options: commonEventManager.CommonEventPublishData = {
      code: 1, // 公共事件的初始代码
      data: 'initial data', // 公共事件的初始数据
    };
    
3.  传入需要发布的事件名称、需要发布的指定信息和回调函数，发布事件。
    
    // 发布公共事件，其中的event字段需要替换为实际的事件名称。
    commonEventManager.publish('event', options, (err: BusinessError) => {
      if (err) {
        hilog.error(DOMAIN\_NUMBER, TAG,
          \`Failed to publish common event. Code is ${err.code}, message is ${err.message}\`);
      } else {
        // ...
        hilog.info(DOMAIN\_NUMBER, TAG, \`Succeeded in publishing common event.\`);
      }
    });