1# js_worker_module 2 3### 简介 4 5worker能够让js拥有多线程的能力,通过postMessage完成worker线程与宿主线程通信。 6 7### 接口说明 8接口实现详见:js_worker_module/jsapi/worker 9 10#### Worker对象描述 11 12宿主线程用于与worker线程通信的Object对象。 13 14##### 接口 15 161. 17 18- 接口名 19 20|constructor(scriptURL:string, options? WorkerOptions) | 构造函数 | 21|---|---| 22 23- 使用示例 24 25``` 26import worker from "@ohos.worker" 27const worker = new worker.Worker("workers/worker.js"); 28``` 29 302. 31 32- 接口名 33 34| postMessage(message:Object, options?:PostMessageOptions) | 向worker线程发送消息 | 35|---|---| 36| postMessage(message:Object, transfer:ArrayBuffer[]) | 向worker线程发送消息 | 37 38- 使用示例 39 40``` 41// 示例一 42import worker from "@ohos.worker" 43const worker = new worker.Worker("workers/worker.js"); 44worker.postMessage("hello world"); 45 46// 示例二 47import worker from "@ohos.worker" 48const worker = new worker.Worker("workers/worker.js"); 49var buffer = new ArrayBuffer(8); 50worker.postMessage(buffer, [buffer]); 51``` 52 533. 54 55- 接口名 56 57| on(type:string, listener:EventListener) | 向worker添加一个事件监听 | 58|---|---| 59 60- 使用示例 61 62``` 63import worker from "@ohos.worker" 64const worker = new worker.Worker("workers/worker.js"); 65worker.on("alert", (e)=>{ 66 console.log("worker on..."); 67}) 68``` 69 704. 71 72- 接口名 73 74| once(type:string, listener:EventListener) | 向worker添加一个事件监听, 事件监听只执行一次便自动删除 | 75|---|---| 76 77- 使用示例 78 79``` 80import worker from "@ohos.worker" 81const worker = new worker.Worker("workers/worker.js"); 82worker.once("alert", (e)=>{ 83 console.log("worker on..."); 84}) 85``` 86 875. 88 89- 接口名 90 91| off(type:string, listener?:EventListener) | 删除worker的事件监听 | 92|---|---| 93 94- 使用示例 95 96``` 97import worker from "@ohos.worker" 98const worker = new worker.Worker("workers/worker.js"); 99worker.off("alert"); 100``` 101 1026. 103 104- 接口名 105 106| terminate() | 关闭worker线程,终止worker发送消息 | 107|---|---| 108 109- 使用示例 110 111``` 112import worker from "@ohos.worker" 113const worker = new worker.Worker("workers/worker.js"); 114worker.terminate(); 115``` 116 1177. 118 119- 接口名 120 121| removeEventListener(type:string, listener?:EventListener) | 删除worker的事件监听 | 122|---|---| 123 124- 使用示例 125 126``` 127import worker from "@ohos.worker" 128const worker = new worker.Worker("workers/worker.js"); 129worker.removeEventListener("alert"); 130``` 131 1328. 133 134- 接口名 135 136| dispatchEvent(event: Event) | 分发定义在worker的事件 | 137|---|---| 138 139- 使用示例 140 141``` 142import worker from "@ohos.worker" 143const worker = new worker.Worker("workers/worker.js"); 144worker.dispatchEvent({type:"alert"}); 145``` 146 1479. 148 149- 接口名 150 151| removeAllListener() | 删除worker的所有事件监听 | 152|---|---| 153 154- 使用示例 155 156``` 157import worker from "@ohos.worker" 158const worker = new worker.Worker("workers/worker.js"); 159worker.removeAllListener(); 160``` 161 162##### 属性 163 1641. 165 166- 属性名 167 168| onexit?:(code:number)=>void | worker退出时被调用的事件处理程序,处理程序在宿主线程中执行 | 169|---|---| 170 171- 使用示例 172 173``` 174import worker from "@ohos.worker" 175const worker = new worker.Worker("workers/worker.js"); 176worker.onexit = function(e) { 177 console.log("onexit..."); 178} 179``` 180 1812. 182 183- 属性名 184 185| onerror?:(ev:ErrorEvent)=>void | worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行 | 186|---|---| 187 188- 使用示例 189 190``` 191import worker from "@ohos.worker" 192const worker = new worker.Worker("workers/worker.js"); 193worker.onerror = function(e) { 194 console.log("onerror..."); 195} 196``` 197 1983. 199 200- 属性名 201 202| onmessage?:(ev:MessageEvent)=>void | 宿主线程收到来自其创建的worker通过parentPort.postMessage接口发送的消息时被调用的事件处理程序, 处理程序在宿主线程中执行 | 203|---|---| 204 205- 使用示例 206 207``` 208import worker from "@ohos.worker" 209const worker = new worker.Worker("workers/worker.js"); 210worker.onmessage = function(e) { 211 console.log("onmessage..."); 212} 213``` 214 2154. 216 217- 属性名 218 219| onmessageerror?:(event:MessageEvent)=>void | worker对象接收到一条无法序列化的消息时被调用的事件处理程序, 处理程序在宿主线程中执行 | 220|---|---| 221 222- 使用示例 223 224``` 225import worker from "@ohos.worker" 226const worker = new worker.Worker("workers/worker.js"); 227worker.onmessageerror = function(e) { 228 console.log("onmessageerror..."); 229} 230``` 231 232#### parentPort对象描述 233 234worker线程用于与宿主线程通信的Object对象。 235 236##### 接口 237 2381. 239 240- 接口名 241 242| postMessage(message:Object, options?:PostMessageOptions) | 向宿主线程发送消息 | 243|---|---| 244| postMessage(message:Object, transfer:ArrayBuffer[]) | 向宿主线程发送消息 | 245 246- 使用示例 247 248``` 249// main.js 250import worker from "@ohos.worker" 251const worker = new worker.Worker("workers/worker.js"); 252worker.postMessage("hello world"); 253 254// worker.js 255import worker from "@ohos.worker" 256const parentPort = worker.parentPort; 257parentPort.onmessage = function(e) { 258 parentPort.postMessage("hello world from worker.js"); 259} 260``` 261 2622. 263 264- 接口名 265 266| close() | 关闭worker线程,终止worker接收消息 | 267|---|---| 268 269- 使用示例 270 271``` 272// main.js 273import worker from "@ohos.worker" 274const worker = new worker.Worker("workers/worker.js"); 275worker.postMessage("hello world"); 276 277// worker.js 278import worker from "@ohos.worker" 279const parentPort = worker.parentPort; 280parentPort.onmessage = function(e) { 281 parentPort.close(); 282} 283``` 284 285##### 属性 286 2871. 288 289- 属性名 290 291| onmessage?:(event:MessageEvent)=>void | 宿主线程收到来自其创建的worker通过worker.postMessage接口发送的消息时被调用的事件处理程序,处理程序在worker线程中执行 | 292|---|---| 293 294- 使用示例 295 296``` 297// main.js 298import worker from "@ohos.worker" 299const worker = new worker.Worker("workers/worker.js"); 300worker.postMessage("hello world"); 301 302// worker.js 303import worker from "@ohos.worker" 304const parentPort = worker.parentPort; 305parentPort.onmessage = function(e) { 306 console.log("receive main.js message"); 307} 308``` 309 3102. 311 312- 属性名 313 314| onerror?:(ev: ErrorEvent)=>void | worker在执行过程中发生异常被调用的事件处理程序,处理程序在worker线程中执行 | 315|---|---| 316 317- 使用示例 318 319``` 320// main.js 321import worker from "@ohos.worker" 322const worker = new worker.Worker("workers/worker.js"); 323worker.postMessage("hello world"); 324 325// worker.js 326import worker from "@ohos.worker" 327const parentPort = worker.parentPort; 328parentPort.onerror = function(e) { 329 console.log("onerror..."); 330} 331 332``` 333 3343. 335 336- 属性名 337 338| onmessageerror?:(event: MessageEvent)=>void | worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序, 处理程序在worker线程中执行 | 339|---|---| 340 341- 使用示例 342 343``` 344// main.js 345import worker from "@ohos.worker" 346const worker = new worker.Worker("workers/worker.js"); 347worker.postMessage("hello world"); 348 349// worker.js 350import worker from "@ohos.worker" 351const parentPort = worker.parentPort; 352parentPort.onmessageerror = function(e) { 353 console.log("onmessageerror..."); 354} 355``` 356 357### 涉及仓 358 359- ace_ace_engine(foundation/ace/ace_engine-readme_zh.md) 360- ace_napi(foundation/ace/napi-readme_zh.md) 361 362## 相关仓 363[js_worker_module 子系统](base/compileruntime/js_worker_module-readme_zh.md) 364 365 366### 许可证 367 368Worker在[Mozilla许可证](https://www.mozilla.org/en-US/MPL/)下可用,说明文档详见[说明文档](https://gitee.com/openharmony/js_worker_module/blob/master/mozilla_docs.txt)。有关完整的许可证文本,有关完整的许可证文本,请参见[许可证](https://gitee.com/openharmony/js_worker_module/blob/master/LICENSE)