HarmonyOS鸿蒙Next中EventData异常
HarmonyOS鸿蒙Next中EventData异常 使用emitter接收通知传来的参数,为啥EventData总是undefined?有没有示例代码参考下
3 回复
参考一下官方给的Api emitter.on,持续订阅指定的事件,并在接收到该事件时,执行对应的回调处理函数。
import { Callback } from '@kit.BasicServicesKit';
@Sendable
class Sample {
constructor() {
this.count = 100;
}
printCount() {
console.info('Print count : ' + this.count);
}
count: number;
}
let callback: Callback<emitter.GenericEventData<Sample>> = (eventData: emitter.GenericEventData<Sample>): void => {
console.info(`eventData: ${JSON.stringify(eventData?.data)}`);
if (eventData?.data instanceof Sample) {
eventData?.data?.printCount();
}
}
// 收到eventId为"eventId"的事件后执行回调函数
emitter.on("eventId", callback);
更多关于HarmonyOS鸿蒙Next中EventData异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,EventData异常通常与事件处理机制相关。EventData用于封装事件传递的数据,异常可能源于事件订阅、发布或数据解析过程。常见原因包括事件类型不匹配、数据格式错误或生命周期管理不当。排查时需检查事件定义、订阅者注册及数据序列化逻辑,确保事件路径和参数正确。系统日志可提供具体错误信息辅助定位问题。
在HarmonyOS Next中,EventData为undefined通常是因为事件发送与接收时的数据类型不匹配或事件未正确注册。请检查以下关键点:
- 事件发送代码:
// 发送事件时需明确指定data类型
emitter.emit({
eventId: 1,
data: { value: "test_data" } // 必须传递对象
});
- 事件接收代码:
// 接收时需要类型断言
emitter.on("eventName", (eventData: emitter.EventData) => {
const data = eventData.data as { value: string }; // 关键:类型断言
console.log(data.value); // 正常输出test_data
});
- 常见问题排查:
- 确保发送方data字段不为空
- 检查事件ID在发送/接收时保持一致
- 验证事件监听注册在发送操作之前完成
注意:EventData是泛型容器,必须通过类型断言明确具体数据类型才能正常访问字段。