# 启动一个worker - [导入模块](#zh-cn_topic_0000001210206047_s56d19203690d4782bfc74069abb6bd71) - [权限](#zh-cn_topic_0000001210206047_section11257113618419) - [属性](#zh-cn_topic_0000001210206047_section1578718135716) - [WorkerOptions](#zh-cn_topic_0000001210206047_section189341937163212) - [constructor](#zh-cn_topic_0000001210206047_section192192415554) - [Worker](#zh-cn_topic_0000001210206047_section182179935414) - [postMessage](#zh-cn_topic_0000001210206047_section1410593619146) - [on](#zh-cn_topic_0000001210206047_section1201327272) - [once](#zh-cn_topic_0000001210206047_section74391240133513) - [off](#zh-cn_topic_0000001210206047_section8902182918363) - [terminate](#zh-cn_topic_0000001210206047_section17586211104214) - [onexit](#zh-cn_topic_0000001210206047_section1478913292320) - [onerror](#zh-cn_topic_0000001210206047_section89811422210) - [onmessage](#zh-cn_topic_0000001210206047_section516520044515) - [onmessageerror](#zh-cn_topic_0000001210206047_section85981145102714) - [EventTarget](#zh-cn_topic_0000001210206047_section3283104561014) - [addEventListener](#zh-cn_topic_0000001210206047_section16405103834511) - [removeEventListener](#zh-cn_topic_0000001210206047_section1437219413469) - [dispatchEvent](#zh-cn_topic_0000001210206047_section1593912134916) - [removeAllListener](#zh-cn_topic_0000001210206047_section1795215505533) - [DedicatedWorkerGlobalScope](#zh-cn_topic_0000001210206047_section36872023123912) - [postMessage](#zh-cn_topic_0000001210206047_section1570345794013) - [close](#zh-cn_topic_0000001210206047_section849610376427) - [onmessage](#zh-cn_topic_0000001210206047_section1371121184815) - [onmessageerror](#zh-cn_topic_0000001210206047_section16116749135015) - [PostMessageOptions](#zh-cn_topic_0000001210206047_section176401093245) - [Event](#zh-cn_topic_0000001210206047_section1674694018507) - [EventListener](#zh-cn_topic_0000001210206047_section53411747134914) - [\(evt: Event\): void | Promise](#zh-cn_topic_0000001210206047_section1915072122913) - [ErrorEvent](#zh-cn_topic_0000001210206047_section11241623172418) - [MessageEvent](#zh-cn_topic_0000001210206047_section191271455124710) - [WorkerGlobalScope](#zh-cn_topic_0000001210206047_section12882825611) - [属性](#zh-cn_topic_0000001210206047_section3626134611546) - [onerror](#zh-cn_topic_0000001210206047_section1234812184551) >![](../../public_sys-resources/icon-note.gif) **说明:** >从 API Version 7 开始支持。 ## 导入模块 ``` import worker from '@ohos.worker'; ``` ## 权限 无 ## 属性

名称

参数类型

可读

可写

说明

parentPort

DedicatedWorkerGlobalScope

worker线程用于与宿主线程通信的对象

## WorkerOptions worker构造函数函数的选项信息,用于为worker添加其他信息。

名称

参数类型

可读

可写

说明

type

"classic"

按照指定方式执行脚本。

name

string

worker的名称。

## constructor constructor\(scriptURL: string, options?: WorkerOptions\) worker构造函数。 - 参数:

参数名

类型

必填

说明

scriptURL

string

worker执行脚本的url,路径规范:若DevEco新建工程在pages同级下没有workers目录,需要新建workers目录,将脚本文件放入workers目录。

options

WorkerOptions

worker构造的选项。

- 返回值:

参数名

说明

worker

执行Worker构造函数生成的Worker对象,失败则返回undefined。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js", {name:"first worker"} ``` ## Worker 使用以下方法前,均需先构造worker实例,Worker类继承[EventTarget](#zh-cn_topic_0000001210206047_section3283104561014)。 ### postMessage postMessage\(message: Object, options?: PostMessageOptions\): void 向worker线程发送消息,数据的传输采用结构化克隆算法。 - 参数:

参数名

类型

必填

说明

message

Object

发送至worker的数据。

options

PostMessageOptions

可转移对象是 ArrayBuffer 的实例对象。transferList数组中不可传入null。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.postMessage("hello world") const worker = new worker.Worker("workers/worker.js") var buffer = new ArrayBuffer(8); worker.postMessage(buffer, [buffer]); ``` ### on on\(type: string, listener: EventListener\): void 向worker添加一个事件监听。 - 参数:

参数名

类型

必填

说明

type

string

监听事件的type。

listener

EventListener

回调的事件。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.on("alert", (e)=>{ console.log("alert listener callback); }) ``` ### once once\(type: string, listener: EventListener\): void 向worker添加一个事件监听,事件监听只执行一次便自动删除。 - 参数:

参数名

类型

必填

说明

type

string

监听事件的type。

listener

EventListener

回调的事件。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.once("alert", (e)=>{ console.log("alert listener callback); }) ``` ### off off\(type: string, listener?: EventListener\): void 删除worker的事件监听。 - 参数:

参数名

类型

必填

说明

type

string

需要删除事件的type。

listener

EventListener

需要删除的回调的事件。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.off("alert") ``` ### terminate terminate\(\): void 关闭worker线程,终止worker接收消息。 - 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.terminate() ``` ### onexit onexit?: \(code: number\) =\> void Worker对象的onexit属性表示worker退出时被调用的事件处理程序,处理程序在宿主线程中执行。 - 参数:

参数名

类型

必填

说明

code

number

worker退出的code。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.onexit = function(e) { console.log("onexit") } ``` ### onerror onerror?: \(err: ErrorEvent\) =\> void Worker对象的onerror属性表示worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。 - 参数:

参数名

类型

必填

说明

err

ErrorEvent

异常数据。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.onerror = function(e) { console.log("onerror") } ``` ### onmessage onmessage?: \(event: MessageEvent\) =\> void Worker对象的onmessage属性表示宿主线程接收到来自其创建的worker通过parentPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。 - 参数:

参数名

类型

必填

说明

event

MessageEvent

收到的worker消息数据。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.onmessage = function(e) { console.log("onerror") } ``` ### onmessageerror onmessageerror?: \(event: MessageEvent\) =\> void Worker对象的onmessageerror属性表示当 Worker 对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。 - 参数:

参数名

类型

必填

说明

event

MessageEvent

异常数据。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.onmessageerror= function(e) { console.log("onmessageerror") } ``` ## EventTarget ### addEventListener addEventListener\(type: string, listener: EventListener\): void 向worker添加一个事件监听。 - 参数:

参数名

类型

必填

说明

type

string

监听事件的type。

listener

EventListener

回调的事件。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.addEventListener("alert", (e)=>{ console.log("alert listener callback); }) ``` ### removeEventListener removeEventListener\(type: string, callback?: EventListener\): void 删除worker的事件监听。 - 参数:

参数名

类型

必填

说明

type

string

需要删除事件的type。

callback

EventListener

需要删除的回调的事件。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.removeEventListener("alert") ``` ### dispatchEvent dispatchEvent\(event: Event\): boolean 分发定义在worker的事件。 - 参数:

参数名

类型

必填

说明

event

Event

需要分发的事件。

- 返回值:

参数名

说明

boolean

分发的结果,false表示分发失败。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.dispatchEvent({type:"alert"}) ``` ### removeAllListener removeAllListener\(\): void 删除worker的所有事件监听。 - 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.removeAllListener({type:"alert"}) ``` ## DedicatedWorkerGlobalScope worker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口关闭worker线程,DedicatedWorkerGlobalScope类继承[WorkerGlobalScope](#zh-cn_topic_0000001210206047_section12882825611)。 ### postMessage postMessage\(message: Object, options?: PostMessageOptions\): void worker向宿主线程发送消息。 - 参数:

参数名

类型

必填

说明

message

Object

发送至worker的数据。

options

PostMessageOptions

可转移对象是ArrayBuffer的实例对象。transferList数组中不可传入null。

- 示例: ``` main.js import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.postMessage("hello world") worker.onmessage = function(e) { console.log("receive data from worker.js") } worker.js import worker from "@ohos.worker"; const parentPort = worker.parentPort; parentPort.onmessage = function(e){ parentPort.postMessage("receive data from main.js") } ``` ### close close\(\): void 关闭worker线程,终止worker接收消息。 - 示例: ``` main.js import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.js import worker from "@ohos.worker"; const parentPort = worker.parentPort; parentPort.onmessage = function(e) { parentPort.close() } ``` ### onmessage onmessage?: \(event: MessageEvent\) =\> void DedicatedWorkerGlobalScope的onmessage属性表示worker线程收到来自其宿主线程通过worker.postMessage接口发送的消息时被调用的事件处理程序,处理程序在worker线程中执行。 - 参数:

参数名

类型

必填

说明

event

MessageEvent

收到的worker消息数据。

- 示例: ``` main.js import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.postMessage("hello world") worker.js import worker from "@ohos.worker"; const parentPort = worker.parentPort; parentPort.onmessage = function(e) { console.log("receive main.js message") } ``` ### onmessageerror onmessageerror?: \(event: MessageEvent\) =\> void DedicatedWorkerGlobalScope的onmessageerror属性表示当 Worker 对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在worker线程中执行。 - 参数:

参数名

类型

必填

说明

event

MessageEvent

异常数据。

- 示例: ``` main.js import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.js import worker from "@ohos.worker"; const parentPort = worker.parentPort; parentPort.onmessageerror= function(e) { console.log("worker.js onmessageerror") } ``` ## PostMessageOptions 明确数据传递过程中需要转移所有权对象的类,传递所有权的对象必须是ArrayBuffer。

名称

参数类型

可读

可写

说明

transfer

Object[]

ArrayBuffer数组,用于传递所有权。

## Event 事件类。

名称

参数类型

可读

可写

说明

type

string

指定事件的type。

timeStamp

number

事件创建时的时间戳(精度为毫秒)。

## EventListener 事件监听类。 ### \(evt: Event\): void | Promise 执行的回调函数。 - 参数:

参数名

类型

必填

说明

evt

Event

回调的事件类。

- 返回值

参数名

说明

void | Promise<void>

无返回值或者以Promise形式返回。

- 示例: ``` import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.addEventListener("alert", (e)=>{ console.log("alert listener callback); }) ``` ## ErrorEvent 错误事件类,用于表示worker执行过程中出现异常的详细信息,ErrorEvent类继承[Event](#zh-cn_topic_0000001210206047_section1674694018507)。

名称

参数类型

可读

可写

说明

message

string

异常发生的错误信息。

filename

string

出现异常所在的文件。

lineno

number

异常所在的行数。

colno

number

异常所在的列数。

error

Object

异常类型。

## MessageEvent 消息类,持有worker线程间传递的数据。

名称

参数类型

可读

可写

说明

data

T

线程间传递的数据。

## WorkerGlobalScope worker线程自身的运行环境,WorkerGlobalScope类继承[EventTarget](#zh-cn_topic_0000001210206047_section3283104561014)。 ### 属性

名称

参数类型

可读

可写

说明

name

string

worker的名字,有new Worker时指定。

self

WorkerGlobalScope & typeof globalThis

WorkerGlobalScope本身。

### onerror onerror?: \(ev: ErrorEvent\) =\> void WorkerGlobalScope的onerror属性表示worker在执行过程中发生异常被调用的事件处理程序,处理程序在worker线程中执行。 - 参数:

参数名

类型

必填

说明

ev

ErrorEvent

异常数据。

- 示例: ``` main.js import worker from '@ohos.worker'; const worker = new worker.Worker("workers/worker.js") worker.js import worker from "@ohos.worker"; const parentPort = worker.parentPort parentPort.onerror = function(e){ console.log("worker.js onerror") } ```