diff --git a/zh-cn/application-dev/reference/apis/js-apis-worker.md b/zh-cn/application-dev/reference/apis/js-apis-worker.md
index e8a8dec36902396f6db9d6dc1b5667f7df44a19b..9e98a5244869cf5fd48b55ee677f6b6a860e9949 100644
--- a/zh-cn/application-dev/reference/apis/js-apis-worker.md
+++ b/zh-cn/application-dev/reference/apis/js-apis-worker.md
@@ -4,7 +4,9 @@ Worker是与主线程并行的独立线程。创建Worker的线程称之为宿
Worker主要作用是为应用程序提供一个多线程的运行环境,可满足应用程序在执行过程中与主线程分离,在后台线程中运行一个脚本操作耗时操作,极大避免类似于计算密集型或高延迟的任务阻塞主线程的运行。由于Worker一旦被创建则不会主动被销毁,若不处于任务状态一直运行,在一定程度上会造成资源的浪费,应及时关闭空闲的Worker。
->  **说明:**
+Worker的上下文对象和主线程的上下文对象是不同的,Worker线程不支持UI操作。
+
+> **说明:**
> 本模块首批接口从API version 7 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## 导入模块
@@ -39,13 +41,13 @@ Worker构造函数的选项信息,用于为Worker添加其他信息。
## ThreadWorker9+
-使用以下方法前,均需先构造Worker实例,Worker类继承[WorkerEventTarget](#workereventtarget9)。
+使用以下方法前,均需先构造ThreadWorker实例,ThreadWorker类继承[WorkerEventTarget](#workereventtarget9)。
### constructor9+
constructor(scriptURL: string, options?: WorkerOptions)
-Worker构造函数。
+ThreadWorker构造函数。
**系统能力:** SystemCapability.Utils.Lang
@@ -58,9 +60,20 @@ Worker构造函数。
**返回值:**
-| 类型 | 说明 |
-| ------ | --------------------------------------------------------- |
-| Worker | 执行Worker构造函数生成的Worker对象,失败则返回undefined。 |
+| 类型 | 说明 |
+| ------------ | ------------------------------------------------------------ |
+| ThreadWorker | 执行ThreadWorker构造函数生成的ThreadWorker对象,失败则返回undefined。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------- |
+| 10200003 | Worker initialization failure. |
+| 10200007 | The worker file patch is invalid path. |
+
+
**示例:**
@@ -137,6 +150,40 @@ Stage模型:
}
```
+### postMessage9+
+
+postMessage(message: Object, transfer: ArrayBuffer[]): void;
+
+向Worker线程发送数据,数据类型必须是序列化所支持的类型。序列化支持类型见其他说明。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------- | ---- | ------------------------------------------------------------ |
+| message | Object | 是 | 发送至Worker的数据。 |
+| transfer | ArrayBuffer[] | 是 | 可传递 ArrayBuffer 的实例对象,数组中不可传入null。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ----------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200006 | Serializing an uncaught exception failed. |
+
+**示例:**
+
+```js
+const workerInstance = new worker.ThreadWorker("workers/worker.js");
+
+workerInstance.postMessage("hello world");
+
+var buffer = new ArrayBuffer(8);
+workerInstance.postMessage(buffer, [buffer]);
+```
### postMessage9+
@@ -153,6 +200,15 @@ postMessage(message: Object, options?: PostMessageOptions): void
| message | Object | 是 | 发送至Worker的数据。 |
| options | [PostMessageOptions](#postmessageoptions) | 否 | 可转移对象是 ArrayBuffer 的实例对象。transferList数组中不可传入null。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ----------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200006 | Serializing an uncaught exception failed. |
+
**示例:**
```js
@@ -164,7 +220,6 @@ var buffer = new ArrayBuffer(8);
workerInstance.postMessage(buffer, [buffer]);
```
-
### on9+
on(type: string, listener: WorkerEventListener): void
@@ -180,6 +235,15 @@ on(type: string, listener: WorkerEventListener): void
| type | string | 是 | 监听的事件类型。 |
| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。回调事件。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -205,6 +269,15 @@ once(type: string, listener: WorkerEventListener): void
| type | string | 是 | 监听的事件类型。 |
| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。回调事件。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -230,6 +303,15 @@ off(type: string, listener?: WorkerEventListener): void
| type | string | 是 | 需要删除的事件类型。 |
| listener | [WorkerEventListener](#workereventlistener9) | 否 | 回调的事件。删除的回调事件。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -247,6 +329,14 @@ terminate(): void
**系统能力:** SystemCapability.Utils.Lang
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
**示例:**
```js
@@ -269,6 +359,15 @@ Worker对象的onexit属性表示Worker销毁时被调用的事件处理程序
| ------ | ------ | ---- | ------------------ |
| code | number | 是 | Worker退出的code。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -300,6 +399,15 @@ Worker对象的onerror属性表示Worker在执行过程中发生异常被调用
| ------ | ------------------------- | ---- | ---------- |
| err | [ErrorEvent](#errorevent) | 是 | 异常数据。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -324,6 +432,15 @@ Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worke
| ------ | -------------------------------- | ---- | ---------------------- |
| event | [MessageEvents](#messageevents9) | 是 | 收到的Worker消息数据。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -350,6 +467,15 @@ Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被
| ------ | -------------------------------- | ---- | ---------- |
| event | [MessageEvents](#messageevents9) | 是 | 异常数据。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -359,6 +485,169 @@ workerInstance.onmessageerror= function(e) {
}
```
+### addEventListener9+
+
+addEventListener(type: string, listener: WorkerEventListener): void
+
+向Worker添加一个事件监听,该接口与[on9+](#on9)接口功能一致。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------------- | ---- | ---------------- |
+| type | string | 是 | 监听的事件类型。 |
+| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
+**示例:**
+
+```js
+const workerInstance = new worker.ThreadWorker("workers/worker.js");
+workerInstance.addEventListener("alert", (e)=>{
+ console.log("alert listener callback");
+})
+```
+
+
+### removeEventListener9+
+
+removeEventListener(type: string, callback?: WorkerEventListener): void
+
+删除Worker的事件监听,该接口与[off9+](#off9)接口功能一致。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------------- | ---- | ---------------------------- |
+| type | string | 是 | 需要删除的监听事件类型。 |
+| callback | [WorkerEventListener](#workereventlistener9) | 否 | 回调的事件。删除的回调事件。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
+**示例:**
+
+```js
+const workerInstance = new worker.ThreadWorker("workers/worker.js");
+workerInstance.addEventListener("alert", (e)=>{
+ console.log("alert listener callback");
+})
+workerInstance.removeEventListener("alert");
+```
+
+
+### dispatchEvent9+
+
+dispatchEvent(event: Event): boolean
+
+分发定义在Worker的事件。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | --------------- | ---- | ---------------- |
+| event | [Event](#event) | 是 | 需要分发的事件。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------- | ------------------------------- |
+| boolean | 分发的结果,false表示分发失败。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
+**示例:**
+
+```js
+const workerInstance = new worker.ThreadWorker("workers/worker.js");
+//用法一:
+workerInstance.on("alert_on", (e)=>{
+ console.log("alert listener callback");
+})
+workerInstance.once("alert_once", (e)=>{
+ console.log("alert listener callback");
+})
+workerInstance.addEventListener("alert_add", (e)=>{
+ console.log("alert listener callback");
+})
+
+//once接口创建的事件执行一次便会删除。
+workerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。
+//on接口创建的事件可以一直被分发,不能主动删除。
+workerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
+workerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
+//addEventListener接口创建的事件可以一直被分发,不能主动删除。
+workerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
+workerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
+
+//用法二:
+//event类型的type支持自定义,同时存在"message"/"messageerror"/"error"特殊类型,如下所示
+//当type = "message",onmessage接口定义的方法同时会执行。
+//当type = "messageerror",onmessageerror接口定义的方法同时会执行。
+//当type = "error",onerror接口定义的方法同时会执行。
+//若调用removeEventListener接口或者off接口取消事件时,能且只能取消使用addEventListener/on/once创建的事件。
+
+workerInstance.addEventListener("message", (e)=>{
+ console.log("message listener callback");
+})
+workerInstance.onmessage = function(e) {
+ console.log("onmessage : message listener callback");
+}
+//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
+workerInstance.dispatchEvent({type:"message", timeStamp:0});
+```
+
+
+### removeAllListener9+
+
+removeAllListener(): void
+
+删除Worker所有的事件监听。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
+**示例:**
+
+```js
+const workerInstance = new worker.ThreadWorker("workers/worker.js");
+workerInstance.addEventListener("alert", (e)=>{
+ console.log("alert listener callback");
+})
+workerInstance.removeAllListener();
+```
## WorkerEventTarget9+
@@ -377,6 +666,15 @@ addEventListener(type: string, listener: WorkerEventListener): void
| type | string | 是 | 监听的事件类型。 |
| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -402,6 +700,14 @@ removeEventListener(type: string, callback?: WorkerEventListener): void
| type | string | 是 | 需要删除的监听事件类型。 |
| callback | [WorkerEventListener](#workereventlistener9) | 否 | 回调的事件。删除的回调事件。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
**示例:**
```js
@@ -433,6 +739,14 @@ dispatchEvent(event: Event): boolean
| ------- | ------------------------------- |
| boolean | 分发的结果,false表示分发失败。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
**示例:**
```js
@@ -449,7 +763,7 @@ workerInstance.addEventListener("alert_add", (e)=>{
})
//once接口创建的事件执行一次便会删除。
-workerInstance.dispatchEvent({type:"alert_once", timeStamp:0});
+workerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。
//on接口创建的事件可以一直被分发,不能主动删除。
workerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
workerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
@@ -483,6 +797,14 @@ removeAllListener(): void
**系统能力:** SystemCapability.Utils.Lang
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
**示例:**
```js
@@ -498,6 +820,53 @@ workerInstance.removeAllListener();
Worker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。ThreadWorkerGlobalScope类继承[GlobalScope9+](#globalscope9)。
+### postMessage9+
+
+postMessage(messageObject: Object, transfer: ArrayBuffer[]): void;
+
+Worker线程向宿主线程发送消息。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------- | ---- | ------------------------------------------------------- |
+| message | Object | 是 | 发送至宿主线程的数据。 |
+| transfer | ArrayBuffer[] | 是 | 可传输对象是ArrayBuffer的实例对象,数组中不可传入null。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ----------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200006 | Serializing an uncaught exception failed. |
+
+**示例:**
+
+```js
+// main.js
+import worker from '@ohos.worker';
+const workerInstance = new worker.ThreadWorker("workers/worker.js");
+workerInstance.postMessage("hello world");
+workerInstance.onmessage = function(e) {
+ // let data = e.data;
+ console.log("receive data from worker.js");
+}
+```
+
+```js
+// worker.js
+import worker from '@ohos.worker';
+const workerPort = worker.workerPort;
+workerPort.onmessage = function(e){
+ // let data = e.data;
+ var buffer = new ArrayBuffer(8);
+ workerPort.postMessage(buffer, [buffer]);
+}
+```
### postMessage9+
@@ -514,6 +883,15 @@ Worker线程向宿主线程发送消息。
| message | Object | 是 | 发送至宿主线程的数据。 |
| options | [PostMessageOptions](#postmessageoptions) | 否 | 可转移对象是ArrayBuffer的实例对象。transferList数组中不可传入null。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ----------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200006 | Serializing an uncaught exception failed. |
+
**示例:**
```js
@@ -530,10 +908,10 @@ workerInstance.onmessage = function(e) {
```js
// worker.js
import worker from '@ohos.worker';
-const parentPort = worker.workerPort;
-parentPort.onmessage = function(e){
+const workerPort = worker.workerPort;
+workerPort.onmessage = function(e){
// let data = e.data;
- parentPort.postMessage("receive data from main.js");
+ workerPort.postMessage("receive data from main.js");
}
```
@@ -546,6 +924,14 @@ close(): void
**系统能力:** SystemCapability.Utils.Lang
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | ------------------------------- |
+| 10200004 | Worker instance is not running. |
+
**示例:**
```js
@@ -557,16 +943,16 @@ const workerInstance = new worker.ThreadWorker("workers/worker.js");
```js
// worker.js
import worker from '@ohos.worker';
-const parentPort = worker.workerPort;
-parentPort.onmessage = function(e) {
- parentPort.close()
+const workerPort = worker.workerPort;
+workerPort.onmessage = function(e) {
+ workerPort.close()
}
```
### onmessage9+
-onmessage?: (this: ThreadWorkerGlobalScope, event: MessageEvents) => void
+onmessage?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) => void
DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
@@ -577,7 +963,16 @@ DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ---------------------------------------------------- | ---- | ------------------------ |
| this | [ThreadWorkerGlobalScope](#threadworkerglobalscope9) | 是 | 指向调用者对象。 |
-| event | [MessageEvents](#messageevents9) | 是 | 收到宿主线程发送的数据。 |
+| ev | [MessageEvents](#messageevents9) | 是 | 收到宿主线程发送的数据。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
**示例:**
@@ -591,8 +986,8 @@ workerInstance.postMessage("hello world");
```js
// worker.js
import worker from '@ohos.worker';
-const parentPort = worker.workerPort;
-parentPort.onmessage = function(e) {
+const workerPort = worker.workerPort;
+workerPort.onmessage = function(e) {
console.log("receive main.js message");
}
```
@@ -600,7 +995,7 @@ parentPort.onmessage = function(e) {
### onmessageerror9+
-onmessageerror?: (this: ThreadWorkerGlobalScope, event: MessageEvents) => void
+onmessageerror?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) => void
DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
@@ -611,7 +1006,16 @@ DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到
| 参数名 | 类型 | 必填 | 说明 |
| ------ | -------------------------------- | ---- | ---------- |
| this | [ThreadWorkerGlobalScope](#threadworkerglobalscope9) | 是 | 指向调用者对象。 |
-| event | [MessageEvents](#messageevents9) | 是 | 异常数据。 |
+| ev | [MessageEvents](#messageevents9) | 是 | 异常数据。 |
+
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
**示例:**
@@ -651,6 +1055,15 @@ parentPort.onmessageerror = function(e) {
| ------------------------------------- | ------------------------------- |
| void \| Promise<void> | 无返回值或者以Promise形式返回。 |
+**错误码:**
+
+以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
+
+| 错误码ID | 错误信息 |
+| -------- | -------------------------------------------- |
+| 10200004 | Worker instance is not running. |
+| 10200005 | The invoked API is not supported in workers. |
+
**示例:**
```js
@@ -700,8 +1113,8 @@ const workerInstance = new worker.ThreadWorker("workers/worker.js")
```js
// worker.js
import worker from '@ohos.worker';
-const parentPort = worker.workerPort
-parentPort.onerror = function(e){
+const workerPort = worker.workerPort
+workerPort.onerror = function(e){
console.log("worker.js onerror")
}
```
@@ -815,9 +1228,10 @@ Stage模型:
}
}
```
+
### postMessage(deprecated)
-postMessage(message: Object, options?: PostMessageOptions): void
+postMessage(message: Object, transfer: ArrayBuffer[]): void;
向Worker线程发送数据,数据类型必须是序列化所支持的类型。序列化支持类型见其他说明。
@@ -828,6 +1242,35 @@ postMessage(message: Object, options?: PostMessageOptions): void
**参数:**
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------- | ---- | ----------------------------------------------- |
+| message | Object | 是 | 发送至Worker的数据。 |
+| transfer | ArrayBuffer[] | 是 | 可转移对象是 ArrayBuffer 的实例对象。 |
+
+**示例:**
+
+```js
+const workerInstance = new worker.Worker("workers/worker.js");
+
+workerInstance.postMessage("hello world");
+
+var buffer = new ArrayBuffer(8);
+workerInstance.postMessage(buffer, [buffer]);
+```
+
+### postMessage(deprecated)
+
+postMessage(message: Object, options?: PostMessageOptions): void
+
+向Worker线程发送数据,数据类型必须是序列化所支持的类型。序列化支持类型见其他说明。
+
+> **说明:**
+> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.postMessage9+](#postmessage9-1)替代。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**参数:**
+
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
| message | Object | 是 | 发送至Worker的数据。 |
@@ -839,9 +1282,6 @@ postMessage(message: Object, options?: PostMessageOptions): void
const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.postMessage("hello world");
-
-var buffer = new ArrayBuffer(8);
-workerInstance.postMessage(buffer, [buffer]);
```
@@ -1165,7 +1605,7 @@ workerInstance.addEventListener("alert_add", (e)=>{
})
//once接口创建的事件执行一次便会删除。
-workerInstance.dispatchEvent({type:"alert_once", timeStamp:0});
+workerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。
//on接口创建的事件可以一直被分发,不能主动删除。
workerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
workerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
@@ -1218,6 +1658,44 @@ Worker线程用于与宿主线程通信的类,通过postMessage接口发送消
> **说明:**
> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope9+](#threadworkerglobalscope9)替代。
+### postMessage9+
+
+postMessage(messageObject: Object, transfer: ArrayBuffer[]): void;
+
+Worker线程向宿主线程发送消息。
+
+**系统能力:** SystemCapability.Utils.Lang
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------- | ---- | ----------------------------------------------------- |
+| message | Object | 是 | 发送至宿主线程的数据。 |
+| transfer | ArrayBuffer[] | 是 | 可传输对象是ArrayBuffer的实例对象,数组不可传入null。 |
+
+**示例:**
+
+```js
+// main.js
+import worker from '@ohos.worker';
+const workerInstance = new worker.Worker("workers/worker.js");
+workerInstance.postMessage("hello world");
+workerInstance.onmessage = function(e) {
+ // let data = e.data;
+ console.log("receive data from worker.js");
+}
+```
+```js
+// worker.js
+import worker from '@ohos.worker';
+const parentPort = worker.parentPort;
+parentPort.onmessage = function(e){
+ // let data = e.data;
+ let buffer = new ArrayBuffer(5)
+ parentPort.postMessage(buffer, [buffer]);
+}
+```
+
### postMessage(deprecated)
postMessage(messageObject: Object, options?: PostMessageOptions): void
@@ -1258,7 +1736,6 @@ parentPort.onmessage = function(e){
}
```
-
### close(deprecated)
close(): void
@@ -1289,7 +1766,7 @@ parentPort.onmessage = function(e) {
### onmessage(deprecated)
-onmessage?: (this: DedicatedWorkerGlobalScope, event: MessageEvent) => void
+onmessage?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) => void
DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
@@ -1303,7 +1780,7 @@ DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------------------------------------------ | ---- | ------------------------ |
| this | [DedicatedWorkerGlobalScope](#dedicatedworkerglobalscopedeprecated) | 是 | 指向调用者对象。 |
-| event | [MessageEvent](#messageeventt) | 是 | 收到宿主线程发送的数据。 |
+| ev | [MessageEvent](#messageeventt) | 是 | 收到宿主线程发送的数据。 |
**示例:**
@@ -1325,7 +1802,7 @@ parentPort.onmessage = function(e) {
### onmessageerror(deprecated)
-onmessageerror?: (this: DedicatedWorkerGlobalScope, event: MessageEvent) => void
+onmessageerror?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) => void
DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
@@ -1339,7 +1816,7 @@ DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------------ | ---- | ---------- |
| this | [DedicatedWorkerGlobalScope](#dedicatedworkerglobalscopedeprecated) | 是 | 指向调用者对象。 |
-| event | [MessageEvent](#messageeventt) | 是 | 异常数据。 |
+| ev | [MessageEvent](#messageeventt) | 是 | 异常数据。 |
**示例:**
@@ -1375,10 +1852,10 @@ parentPort.onmessageerror = function(e) {
**系统能力:** SystemCapability.Utils.Lang
-| 名称 | 类型 | 可读 | 可写 | 说明 |
-| --------- | ------ | ---- | ---- | ---------------------------------- |
-| type | string | 是 | 否 | 指定事件的类型。 |
-| timeStamp | number | 是 | 否 | 事件创建时的时间戳(精度为毫秒)。 |
+| 名称 | 类型 | 可读 | 可写 | 说明 |
+| --------- | ------ | ---- | ---- | -------------------------------------------- |
+| type | string | 是 | 否 | 指定事件的类型。 |
+| timeStamp | number | 是 | 否 | 事件创建时的时间戳(精度为毫秒),暂未支持。 |
## EventListener(deprecated)
@@ -1524,14 +2001,14 @@ workerInstance.onmessage = function(d) {
```js
// worker.js
import worker from '@ohos.worker';
-const parentPort = worker.workerPort;
+const workerPort = worker.workerPort;
class MyModel {
name = "undefined"
Init() {
this.name = "MyModel"
}
}
-parentPort.onmessage = function(d) {
+workerPort.onmessage = function(d) {
console.log("worker.js onmessage");
let data = d.data;
let func1 = function() {
@@ -1545,14 +2022,14 @@ parentPort.onmessage = function(d) {
}
}
let obj2 = new MyModel();
- // parentPort.postMessage(func1); 传递func1发生序列化错误
- // parentPort.postMessage(obj1); 传递obj1发生序列化错误
- parentPort.postMessage(obj2); // 传递obj2不会发生序列化错误
+ // workerPort.postMessage(func1); 传递func1发生序列化错误
+ // workerPort.postMessage(obj1); 传递obj1发生序列化错误
+ workerPort.postMessage(obj2); // 传递obj2不会发生序列化错误
}
-parentPort.onmessageerror = function(e) {
+workerPort.onmessageerror = function(e) {
console.log("worker.js onmessageerror");
}
-parentPort.onerror = function(e) {
+workerPort.onerror = function(e) {
console.log("worker.js onerror");
}
```
@@ -1570,6 +2047,7 @@ Actor并发模型的交互原理:各个Actor并发地处理主线程任务,
- 自API version 9版本开始,若Worker处于已经销毁或正在销毁等非运行状态时,调用其功能接口,会抛出相应的BusinessError。
- Worker的创建和销毁耗费性能,建议管理已创建的Worker并重复使用。
- 创建Worker工程时,new worker.Worker构造函数和new worker.ThreadWorker构造函数不能同时使用,否则将导致工程中Worker的功能异常。自API version 9版本开始,建议使用[new worker.ThreadWorker](#constructor9)构造函数,在API version 8及之前的版本,建议使用[new worker.Worker](#constructordeprecated)构造函数。
+- 创建Worker工程时,在Worker线程的文件中(比如本文中worker.ts)不能导入任何有关构建UI的方法(比如ETS文件等),否则会导致Worker的功能失效。排查方式:解压生成的Hap包,在创建Worker线程的文件目录中找到"worker.js",全局搜索"View"关键字。如果存在该关键字,说明在worker.js中打包进去了构建UI的方法,会导致Worker的功能失效,建议在创建Worker线程的文件中修改 "import “xxx” from src"中src的目录层级。
## 完整示例
> **说明:**
@@ -1610,23 +2088,23 @@ workerInstance.onexit = function() {
import worker from '@ohos.worker';
// 创建worker线程中与主线程通信的对象
-const parentPort = worker.workerPort
+const workerPort = worker.workerPort
// API version 9之前版本,创建worker线程中与主线程通信的对象
// const parentPort = worker.parentPort
// worker线程接收主线程信息
-parentPort.onmessage = function(e) {
+workerPort.onmessage = function(e) {
// data:主线程发送的信息
let data = e.data;
console.log("worker.ts onmessage");
// worker线程向主线程发送信息
- parentPort.postMessage("123")
+ workerPort.postMessage("123")
}
// worker线程发生error的回调
-parentPort.onerror= function(e) {
+workerPort.onerror= function(e) {
console.log("worker.ts onerror");
}
```
@@ -1672,20 +2150,20 @@ workerInstance.onexit = function() {
import worker from '@ohos.worker';
// 创建worker线程中与主线程通信的对象
-const parentPort = worker.workerPort
+const workerPort = worker.workerPort
// worker线程接收主线程信息
-parentPort.onmessage = function(e) {
+workerPort.onmessage = function(e) {
// data:主线程发送的信息
let data = e.data;
console.log("worker.ts onmessage");
// worker线程向主线程发送信息
- parentPort.postMessage("123")
+ workerPort.postMessage("123")
}
// worker线程发生error的回调
-parentPort.onerror= function(e) {
+workerPort.onerror= function(e) {
console.log("worker.ts onerror");
}
```