Emitter
本模块提供发送和处理进程内事件的能力,包括对持续订阅事件或单次订阅事件的处理,取消订阅事件,发送事件到事件队列。
emitter.on 持续订阅某个事件 接收事件的回调处理。
emitter.once 单次订阅某个事件以及接收事件的回调处理,接收到回调处理后自动取消订阅。
emitter.off 取消订阅某个事件。
emitter.emit 发送一个事件到事件队列。
Emitter 投递的事件InnerEvent,两个属性
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
eventId | number | 是 | 是 | 事件的ID,由开发者定义用来辨别事件。 |
priority | 是 | 是 | 事件被投递的优先级。 |
EventPriority 的优先级代表
名称 | 值 | 说明 |
---|---|---|
IMMEDIATE | 0 | 表示事件被立即投递。 |
HIGH | 1 | 表示事件先于LOW优先级投递。 |
LOW | 2 | 表示事件优于IDLE优先级投递,事件的默认优先级是LOW。 |
IDLE | 3 | 表示在没有其他事件的情况下,才投递该事件。 |
传递数据用EventData,
data | [key: string]: any | 发送事件时传递的数据,数据类型支持字符串、整型和布尔型。 其中字符串长度最大为10240字节。 |
使用样例:
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
eventData = {
data: {
"content": "c",
"id": 1,
}};
innerEvent = {
eventId: 1
};
EmitterCallback(eventData) {
logger.info('kangresult');
}
async testWoker(){
logger.info("kang");
for (let i=0;i<5;i++){
logger.info("kang"+i);
emitter.emit(this.innerEvent,this.eventData)
}
}
aboutToAppear(){
// taskpoolTest();
logger.info("aboutToAppear");
emitter.on(this.innerEvent, this.EmitterCallback);
}
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(()=>{
this.testWoker();
})
// MainPage({title:'nahao',content:'bingxing'})
}
.width('100%')
}
.height('100%')
}
}