Skip to content

公共事件的发布

场景介绍

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

INFO

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

接口说明

  • 发布公共事件
bash
publish(event: string, callback: AsyncCallback)
  • 指定发布信息并发布公共事件。
bash
publish(event: string, options: CommonEventPublishData, callback: AsyncCallback)

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

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

导入模块

bash

import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';

const TAG: string = 'ProcessModel';
const DOMAIN_NUMBER: number = 0xFF00;

传入需要发布的事件名称和回调函数,发布事件

bash

// 发布公共事件,其中的event字段需要替换为实际的事件名称。
commonEventManager.publish('event', (err: BusinessError) => {
  if (err) {
    hilog.info(DOMAIN_NUMBER, TAG, `PublishCallBack err = ${JSON.stringify(err)}`);
  } else {
    //...
    hilog.info(DOMAIN_NUMBER, TAG, `Publish success`);
  }
});

发布携带信息的公共事件

携带信息的公共事件,可以发布为无序公共事件、有序公共事件和粘性事件,可以通过参数 CommonEventPublishData 的 isOrdered、isSticky 的字段进行设置。

导入模块

js
import { BusinessError, commonEventManager } from "@kit.BasicServicesKit";
import { hilog } from "@kit.PerformanceAnalysisKit";

const TAG: string = "ProcessModel";
const DOMAIN_NUMBER: number = 0xff00;

构建需要发布的公共事件信息

js
// 公共事件相关信息
let options: commonEventManager.CommonEventPublishData = {
  code: 1, // 公共事件的初始代码
  data: "initial data", // 公共事件的初始数据
};

传入需要发布的事件名称、需要发布的指定信息和回调函数,发布事件。

js
// 发布公共事件,其中的event字段需要替换为实际的事件名称。
commonEventManager.publish("event", options, (err: BusinessError) => {
  if (err) {
    hilog.error(
      DOMAIN_NUMBER,
      TAG,
      "PublishCallBack err = " + JSON.stringify(err)
    );
  } else {
    //...
    hilog.info(DOMAIN_NUMBER, TAG, "Publish success");
  }
});