OpenHarmony开发者论坛
标题:
如何封装一个通用的commonEvent工具类?
[打印本页]
作者:
一只杨
时间:
2023-9-1 11:26
标题:
如何封装一个通用的commonEvent工具类?
[md]【问题描述】
封装一个通用的commonEvent工具类:希望在创建订阅者的同时注册一个自定义的回调函数,然后在收到事件通知的同时能调用这个自定义的回调函数。
【运行环境】
ROM: 3.2 Beta5; API 9
[/md]
作者:
18219201129
时间:
2023-9-4 09:36
你好兄弟 ,我项目中的封装。
import commonEvent from '@ohos.commonEventManager';
export class SubscribeEvent {
private static subscriber = null
// 自定义的回调函数变量
private static callback = null
/**
* 创建订阅者
* @param subscribeInfo 订阅事件
* @callback 用户自定义回调函数
*/
static createSubscriber(subscribeInfo, callback:(a,b)=>void) {
this.callback = callback
commonEvent.createSubscriber(subscribeInfo, (err, subscriber) => {
if (err) {
console.error('CreateSubscriberCallBack err = ' + JSON.stringify(err))
} else {
this.subscriber = subscriber;
this.subscribe(this.subscriber)
console.info('Create subscriber succeed')
}
})
}
/**
* 订阅公共事件
* @param subscriber 订阅者
*/
private static subscribe(subscriber) {
if (subscriber != null) {
commonEvent.subscribe(subscriber, (err, data) => {
if (err) {
console.error('subscribe err = ' + JSON.stringify(err))
} else {
console.info('SubscribeCallBack data= ' + JSON.stringify(data))
this.callback('hello callback', data)
}
})
} else {
console.info("Need create subscriber")
}
}
}
@Entry
@Component
struct Faq10_1 {
@State message: string = ''
build() {
Row() {
Column() {
Text('订阅:' + this.message)
.fontSize(30)
.fontWeight(FontWeight.Bold)
.onClick(() => {
let subscribeInfo = {
events: ["myEvent"]
};
let callback = (a,b) => {
this.message = a
}
SubscribeEvent.createSubscriber(subscribeInfo,callback)
})
Text('发布')
.fontSize(30)
.fontWeight(FontWeight.Bold)
.onClick(() => {
//公共事件相关信息
let options = {
code: 0, //公共事件的初始代码
data: "initial data",//公共事件的初始数据
isOrdered: true //有序公共事件
}
//发布公共事件回调
function publishCB(err) {
if (err) {
console.error(`publish failed, code is ${err.code}, message is ${err.message}`);
} else {
console.info("publish");
}
}
//发布公共事件
try {
commonEvent.publish("myEvent", options, publishCB);
} catch (err) {
console.error(`publish failed, code is ${err.code}, message is ${err.message}`);
}
})
}
.width('100%')
}
.height('100%')
}
}
复制代码
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5