js-apis-emitter.md 6.4 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.events.emitter (Emitter)
Z
zengsiyu 已提交
2

L
Leon 已提交
3
本模块提供了在同一进程不同线程间,或同一进程同一线程内,发送和处理事件的能力,包括持续订阅事件、单次订阅事件、取消订阅事件,以及发送事件到事件队列的能力。
4 5 6

> **说明:**
>
L
Leon 已提交
7 8 9
> 本模块首批接口从API version 7开始支持。后续版本新增接口,采用上角标单独标记接口的起始版本。
>
> 本模块接口在FA模型及Stage模型下均可使用。
Z
zengsiyu 已提交
10 11 12

## 导入模块

X
xuzhihao 已提交
13 14
```ts
import emitter from '@ohos.events.emitter';
Z
zengsiyu 已提交
15 16 17 18
```

## 权限列表

L
Leon 已提交
19
无权限要求。
Z
zengsiyu 已提交
20 21 22

## emitter.on

23
on(event: [InnerEvent](#innerevent), callback: Callback\<[EventData](#eventdata)\>): void
Z
zengsiyu 已提交
24

L
Leon 已提交
25
持续订阅指定的事件,并在接收到该事件时,执行对应的回调处理函数。
Z
zengsiyu 已提交
26

L
Leon 已提交
27
**系统能力**: `SystemCapability.Notification.Emitter`
X
xuzhihao 已提交
28

Z
zengsiyu 已提交
29 30
**参数:**

L
Leon 已提交
31 32 33 34
| 参数名   | 类型                                | 必填 | 说明                                                     |
| -------- | ----------------------------------- | ---- | ------------------------------------------------------ |
| event    | [InnerEvent](#innerevent)           | 是   | 持续订阅的事件,其中[EventPriority](#eventpriority),在订阅事件时无需指定,也不生效 |
| callback | Callback\<[EventData](#eventdata)\> | 是   | 接收到该事件时需要执行的回调处理函数                       |
Z
zengsiyu 已提交
35 36 37

**示例:**

X
xuzhihao 已提交
38 39 40
```ts
let innerEvent: emitter.InnerEvent = {
  eventId: 1
Z
zengsiyu 已提交
41
};
L
Leon 已提交
42

X
xuzhihao 已提交
43 44 45 46
// 收到eventId为1的事件后执行回调函数
emitter.on(innerEvent, () => {
  console.info('callback');
});
Z
zengsiyu 已提交
47 48 49 50
```

## emitter.once

51
once(event: [InnerEvent](#innerevent), callback: Callback\<[EventData](#eventdata)\>): void
Z
zengsiyu 已提交
52

L
Leon 已提交
53
单次订阅指定的事件,并在接收到该事件并执行完相应的回调函数后,自动取消订阅。
Z
zengsiyu 已提交
54

L
Leon 已提交
55
**系统能力**: `SystemCapability.Notification.Emitter`
X
xuzhihao 已提交
56

Z
zengsiyu 已提交
57 58
**参数:**

L
Leon 已提交
59 60 61
| 参数名   | 类型                                | 必填 | 说明                                                                            |
| -------- | ----------------------------------- | ---- | ------------------------------------------------------------------------------ |
| event    | [InnerEvent](#innerevent)           | 是   | 单次订阅的事件,其中[EventPriority](#eventpriority),在订阅事件时无需指定,也不生效 |
L
Leon 已提交
62
| callback | Callback\<[EventData](#eventdata)\> | 是   | 接收到该事件时需要执行的回调处理函数                                             |
Z
zengsiyu 已提交
63 64 65

**示例:**

X
xuzhihao 已提交
66 67
```ts
let innerEvent: emitter.InnerEvent = {
68
    eventId: 1
Z
zengsiyu 已提交
69
};
L
Leon 已提交
70 71

// 收到eventId为1的事件后执行该回调函数
X
xuzhihao 已提交
72
emitter.once(innerEvent, () => {
Z
zengsiyu 已提交
73
    console.info('once callback');
X
xuzhihao 已提交
74
});
Z
zengsiyu 已提交
75 76 77 78
```

## emitter.off

X
xuzhihao 已提交
79
off(eventId: number): void
Z
zengsiyu 已提交
80

X
xuzhihao 已提交
81
取消针对该事件ID的订阅。
Z
zengsiyu 已提交
82

L
Leon 已提交
83
**系统能力**: `SystemCapability.Notification.Emitter`
X
xuzhihao 已提交
84

Z
zengsiyu 已提交
85 86
**参数:**

87 88 89
| 参数名  | 类型   | 必填 | 说明   |
| ------- | ------ | ---- | ------ |
| eventId | number | 是   | 事件ID |
Z
zengsiyu 已提交
90 91 92

**示例:**

X
xuzhihao 已提交
93
```ts
94
// 取消eventID为1的所有事件回调处理函数
Z
zengsiyu 已提交
95 96 97
emitter.off(1);
```

X
xuzhihao 已提交
98 99
## emitter.off<sup>10+<sup>

100
off(eventId: number, callback: Callback\<[EventData](#eventdata)\>): void
X
xuzhihao 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114

取消针对该事件ID的订阅,传入可选参数callback,并且该callback已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。

**系统能力**: `SystemCapability.Notification.Emitter`

**参数:**

| 参数名  | 类型   | 必填 | 说明   |
| ------- | ------ | ---- | ------ |
| eventId | number | 是   | 事件ID |
| callback<sup>10+</sup> | Callback\<[EventData](#eventdata)\> | 是   | API version 10 新增取消该事件的回调处理函数。   |

**示例:**

X
xuzhihao 已提交
115
```ts
116 117
// 取消eventID为1的事件回调处理函数 emitterCallback
// 如果该回调处理函数没有被订阅,则不做任何处理
X
xuzhihao 已提交
118 119 120
emitter.off(1, () => {
  console.info('callback');
});
121 122
```

Z
zengsiyu 已提交
123 124
## emitter.emit

L
Leon 已提交
125
emit(event: [InnerEvent](#innerevent), data?: [EventData](#eventdata)): void
Z
zengsiyu 已提交
126

L
Leon 已提交
127
发送指定的事件。
Z
zengsiyu 已提交
128

L
Leon 已提交
129
**系统能力**: `SystemCapability.Notification.Emitter`
X
xuzhihao 已提交
130

Z
zengsiyu 已提交
131 132 133
**参数:**

| 参数名 | 类型                      | 必填 | 说明           |
L
Leon 已提交
134 135
| ------ | ------------------------- | ---- | ------------- |
| event  | [InnerEvent](#innerevent) | 是   | 发送的事件,其中[EventPriority](#eventpriority)用于指定事件被发送的优先级 |
136
| data   | [EventData](#eventdata)   | 否   | 事件携带的数据 |
Z
zengsiyu 已提交
137 138 139

**示例:**

X
xuzhihao 已提交
140 141
```ts
let eventData: emitter.EventData = {
Z
zengsiyu 已提交
142
    data: {
143 144
        "content": "c",
        "id": 1,
L
Leon 已提交
145 146 147
    }
};

X
xuzhihao 已提交
148
let innerEvent: emitter.InnerEvent = {
149
    eventId: 1,
Z
zengsiyu 已提交
150 151
    priority: emitter.EventPriority.HIGH
};
L
Leon 已提交
152

Z
zengsiyu 已提交
153 154 155
emitter.emit(innerEvent, eventData);
```

F
fangJinliang1 已提交
156 157
## EventPriority

L
Leon 已提交
158
用于表示事件被发送的优先级。
F
fangJinliang1 已提交
159

L
Leon 已提交
160
**系统能力**:  `SystemCapability.Notification.Emitter`
F
fangJinliang1 已提交
161

L
Leon 已提交
162
| 名称      | 值    | 说明                                                |
F
fangJinliang1 已提交
163
| --------- | ---- | --------------------------------------------------- |
L
Leon 已提交
164 165 166 167
| IMMEDIATE | 0    | 表示事件被立即投递。                                 |
| HIGH      | 1    | 表示事件先于LOW优先级投递。                           |
| LOW       | 2    | 表示事件优于IDLE优先级投递,事件的默认优先级是LOW。     |
| IDLE      | 3    | 表示在没有其他事件的情况下,才投递该事件。             |
F
fangJinliang1 已提交
168

Z
zengsiyu 已提交
169 170
## InnerEvent

L
Leon 已提交
171
订阅或发送的事件,订阅事件时`EventPriority`不生效。
Z
zengsiyu 已提交
172

L
Leon 已提交
173
**系统能力**: `SystemCapability.Notification.Emitter`
X
xuzhihao 已提交
174

L
Leon 已提交
175 176 177 178
| 名称     | 类型                        | 可读 | 可写 | 说明                                 |
| -------- | ------------------------------- | ---- | ---- | ------------------------------ |
| eventId  | number                          | 是   | 是   | 事件ID,由开发者定义用来辨别事件。 |
| priority | [EventPriority](#eventpriority) | 是   | 是   | 事件被投递的优先级。             |
Z
zengsiyu 已提交
179 180 181 182 183

## EventData

发送事件时传递的数据。

L
Leon 已提交
184
**系统能力**: `SystemCapability.Notification.Emitter`
X
xuzhihao 已提交
185

X
xuzhihao 已提交
186
| 名称 | 类型           | 可读 | 可写 | 说明           |
Z
zengsiyu 已提交
187
| ---- | ------------------ | ---- | ---- | -------------- |
杨亮 已提交
188
| data | [key: string]: any | 是   | 是   | 发送事件时传递的数据,数据类型支持字符串、整型和布尔型。<br> 其中字符串长度最大为10240字节。 |