跳到主要内容

发布公共事件

场景介绍

当需要发布某个公共事件时,可以通过publish()方法发布事件。发布的公共事件可以携带数据,供订阅者解析并进行下一步处理。

已发出的粘性公共事件后来订阅者也可以接收到,其他公共事件都需要先订阅再接收,订阅参考公共事件订阅章节

接口说明

详细接口见接口文档

接口名接口描述
publish(event: string, callback: AsyncCallback<void>)发布公共事件。
publish(event: string, options: 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的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.`);
    }
    });