Worker Startup
NOTE The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version.
A Worker thread is an independent thread running in parallel with the main thread. The thread that creates the Worker thread is referred to as a host thread. The URL file passed in during Worker creation is executed in the Worker thread. The Worker thread can process time-consuming operations, but cannot directly operate the UI.
Modules to Import
import worker from '@ohos.worker';
Attributes
System capability: SystemCapability.Utils.Lang
Name | Type | Readable | Writable | Description |
---|---|---|---|---|
parentPort | DedicatedWorkerGlobalScope | Yes | Yes | Object of the Worker thread used to communicate with the host thread. |
WorkerOptions
Provides options that can be set for the Worker instance to create.
System capability: SystemCapability.Utils.Lang
Name | Type | Readable | Writable | Description |
---|---|---|---|---|
type | "classic" | Yes | Yes | Mode in which the Worker thread executes the script. |
name | string | Yes | Yes | Name of the Worker thread. |
Worker
Before using the following APIs, you must construct a Worker instance. The Worker class inherits from EventTarget.
constructor
constructor(scriptURL: string, options?: WorkerOptions)
A constructor used to create a Worker instance.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
scriptURL | string | Yes | URL of the script to be executed by the Worker thread. The script is stored in the workers directory, which is in the same directory as the pages directory of the new DevEco Studio project. If the workers directory does not exist, you need to create it. |
options | WorkerOptions | No | Options that can be set for the Worker instance. |
Return value
Type | Description |
---|---|
Worker | Returns the Worker instance created; returns undefined if the Worker instance fails to be created. |
Example
const workerInstance = new worker.Worker("workers/worker.js", {name:"first worker"});
postMessage
postMessage(message: Object, options?: PostMessageOptions): void
Sends a message to the Worker thread. The data is transferred using the structured clone algorithm.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
message | Object | Yes | Data to be sent to the Worker thread. |
options | PostMessageOptions | No | ArrayBuffer instances that can be transferred. The transferList array cannot contain null. |
Example
const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.postMessage("hello world");
const workerInstance= new worker.Worker("workers/worker.js");
var buffer = new ArrayBuffer(8);
workerInstance.postMessage(buffer, [buffer]);
on
on(type: string, listener: EventListener): void
Adds an event listener for the Worker instance.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
type | string | Yes | Type of the event to listen for. |
listener | EventListener | Yes | Callback to invoke when an event of the specified type occurs. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.on("alert", (e)=>{
console.log("alert listener callback");
})
once
once(type: string, listener: EventListener): void
Adds an event listener for the Worker thread and removes the event listener after it is invoked once.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
type | string | Yes | Type of the event to listen for. |
listener | EventListener | Yes | Callback to invoke when an event of the specified type occurs. |
Example
const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.once("alert", (e)=>{
console.log("alert listener callback");
})
off
off(type: string, listener?: EventListener): void
Removes an event listener for the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
type | string | Yes | Type of the event for which the event listener is removed. |
listener | EventListener | No | Callback of the event listener to remove. |
Example
const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.off("alert");
terminate
terminate(): void
Terminates the Worker thread to stop it from receiving messages.
System capability: SystemCapability.Utils.Lang
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.terminate()
onexit
onexit?: (code: number) => void
Defines the event handler to be called when the Worker thread exits. The handler is executed in the host thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
code | number | No | Code indicating the Worker thread exit state. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onexit = function(e) {
console.log("onexit")
}
onerror
onerror?: (err: ErrorEvent) => void
Defines the event handler to be called when an exception occurs during Worker execution. The event handler is executed in the host thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
err | ErrorEvent | No | Error data. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onerror = function(e) {
console.log("onerror")
}
onmessage
onmessage?: (event: MessageEvent) => void
Defines the event handler to be called when the host thread receives a message created by itself and sent by the Worker thread through the parentPort.postMessage. The event handler is executed in the host thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
event | MessageEvent | No | Message received. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onmessage = function(e) {
console.log("onerror")
}
onmessageerror
onmessageerror?: (event: MessageEvent) => void
Defines the event handler to be called when the Worker thread receives a message that cannot be serialized. The event handler is executed in the host thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
event | MessageEvent | No | Error data. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onmessageerror= function(e) {
console.log("onmessageerror")
}
EventTarget
addEventListener
addEventListener(type: string, listener: EventListener): void
Adds an event listener for the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
type | string | Yes | Type of the event to listen for. |
listener | EventListener | Yes | Callback to invoke when an event of the specified type occurs. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.addEventListener("alert", (e)=>{
console.log("alert listener callback");
})
removeEventListener
removeEventListener(type: string, callback?: EventListener): void
Removes an event listener for the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
type | string | Yes | Type of the event for which the event listener is removed. |
callback | EventListener | No | Callback of the event listener to remove. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.removeEventListener("alert")
dispatchEvent
dispatchEvent(event: Event): boolean
Dispatches the event defined for the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
event | Event | Yes | Event to dispatch. |
Return value
Type | Description |
---|---|
boolean | Returns true if the event is dispatched successfully; returns false otherwise. |
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.dispatchEvent({type:"alert"})
removeAllListener
removeAllListener(): void
Removes all event listeners for the Worker thread.
System capability: SystemCapability.Utils.Lang
Example
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.removeAllListener({type:"alert"})
DedicatedWorkerGlobalScope
Implements communication between the Worker thread and the host thread. The postMessage API is used to send messages to the host thread, and the close API is used to terminate the Worker thread. The DedicatedWorkerGlobalScope class inherits from WorkerGlobalScope.
postMessage
postMessage(message: Object, options?: PostMessageOptions): void
Sends a message to the host thread from the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
message | Object | Yes | Data to be sent to the Worker thread. |
options | PostMessageOptions | No | ArrayBuffer instances that can be transferred. The transferList array cannot contain null. |
Example
// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.postMessage("hello world")
workerInstance.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
Terminates the Worker thread to stop it from receiving messages.
System capability: SystemCapability.Utils.Lang
Example
// main.js
import worker from '@ohos.worker';
const workerInstance = 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
Defines the event handler to be called when the Worker thread receives a message sent by the host thread through worker.postMessage. The event handler is executed in the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
event | MessageEvent | No | Message received. |
Example
// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.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
Defines the event handler to be called when the Worker thread receives a message that cannot be deserialized. The event handler is executed in the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
event | MessageEvent | No | Error data. |
Example
// main.js
import worker from '@ohos.worker';
const workerInstance = 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
Specifies the object whose ownership needs to be transferred during data transfer. The object must be ArrayBuffer.
System capability: SystemCapability.Utils.Lang
Name | Type | Readable | Writable | Description |
---|---|---|---|---|
transfer | Object[] | Yes | Yes | ArrayBuffer array used to transfer the ownership. |
Event
Defines the event.
System capability: SystemCapability.Utils.Lang
Name | Type | Readable | Writable | Description |
---|---|---|---|---|
type | string | Yes | No | Type of the event. |
timeStamp | number | Yes | No | Timestamp (accurate to millisecond) when the event is created. |
EventListener
Implements event listening.
(evt: Event): void | Promise<void>
Specifies the callback to invoke.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
evt | Event | Yes | Event class for the callback to invoke. |
Return value
Type | Description |
---|---|
void | Promise<void> | Returns no value or returns a Promise. |
Example
const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.addEventListener("alert", (e)=>{
console.log("alert listener callback");
})
ErrorEvent
Provides detailed information about the exception occurred during Worker execution. The ErrorEvent class inherits from Event.
System capability: SystemCapability.Utils.Lang
Name | Type | Readable | Writable | Description |
---|---|---|---|---|
message | string | Yes | No | Information about the exception. |
filename | string | Yes | No | File where the exception is located. |
lineno | number | Yes | No | Number of the line where the exception is located. |
colno | number | Yes | No | Number of the column where the exception is located. |
error | Object | Yes | No | Type of the exception. |
MessageEvent
Holds the data transferred between Worker threads.
System capability: SystemCapability.Utils.Lang
Name | Type | Readable | Writable | Description |
---|---|---|---|---|
data | T | Yes | No | Data transferred between threads. |
WorkerGlobalScope
Defines the running environment of the Worker thread. The WorkerGlobalScope class inherits from EventTarget.
Attributes
System capability: SystemCapability.Utils.Lang
Name | Type | Readable | Writable | Description |
---|---|---|---|---|
name | string | Yes | No | Worker instance specified when there is a new Worker instance. |
self | WorkerGlobalScope & typeof globalThis | Yes | No | WorkerGlobalScope. |
onerror
onerror?: (ev: ErrorEvent) => void
Defines the event handler to be called when an exception occurs during Worker execution. The event handler is executed in the Worker thread.
System capability: SystemCapability.Utils.Lang
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
ev | ErrorEvent | No | Error data. |
Example
// main.js
import worker from '@ohos.worker';
const workerInstance = 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")
}