Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
57c668bd
D
Docs
项目概览
OpenHarmony
/
Docs
接近 2 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
57c668bd
编写于
10月 27, 2022
作者:
O
openharmony_ci
提交者:
Gitee
10月 27, 2022
浏览文件
操作
浏览文件
下载
差异文件
!10975 Description of adding new interfaces for worker
Merge pull request !10975 from hyq5234/master
上级
55b63f3c
4f878f84
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
772 addition
and
68 deletion
+772
-68
zh-cn/application-dev/reference/apis/js-apis-worker.md
zh-cn/application-dev/reference/apis/js-apis-worker.md
+772
-68
未找到文件。
zh-cn/application-dev/reference/apis/js-apis-worker.md
浏览文件 @
57c668bd
...
...
@@ -16,9 +16,10 @@ import worker from '@ohos.worker';
**系统能力:**
SystemCapability.Utils.Lang
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| ---------- | --------------------------------------------------------- | ---- | ---- | ------------------------------------ |
| parentPort |
[
DedicatedWorkerGlobalScope
](
#dedicatedworkerglobalscope
)
| 是 | 是 | worker线程用于与宿主线程通信的对象。 |
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| --------------------------------- | --------------------------------------------------------- | ---- | ---- | ------------------------------------------------------------ |
| workerPort
<sup>
9+
</sup>
|
[
ThreadWorkerGlobalScope
](
#threadworkerglobalscope9
)
| 是 | 是 | worker线程用于与宿主线程通信的对象。 |
| parentPort
<sup>
(deprecated)
</sup>
|
[
DedicatedWorkerGlobalScope
](
#dedicatedworkerglobalscope
)
| 是 | 是 | worker线程用于与宿主线程通信的对象。
<br/>
此属性从api9开始被废弃,建议使用workerPort
<sup>
9+
</sup>
。 |
## WorkerOptions
...
...
@@ -27,17 +28,641 @@ Worker构造函数的选项信息,用于为Worker添加其他信息。
**系统能力:**
SystemCapability.Utils.Lang
| 名称
| 参数类型 | 可读 | 可写 | 说明
|
| ----
-- | --------- | ---- | ---- | --------
-------------- |
| name
| string | 是 | 是 | Worker的名称。
|
| 名称
| 参数类型 | 可读 | 可写 | 说明
|
| ----
| -------- | ---- | ---- |
-------------- |
| name
| string | 是 | 是 | Worker的名称。
|
## Worker
## ThreadWorker<sup>9+</sup>
使用以下方法前,均需先构造Worker实例,Worker类继承
[
WorkerEventTarget
](
#workereventtarget9
)
。
### constructor<sup>9+</sup>
constructor(scriptURL: string, options?: WorkerOptions)
Worker构造函数。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| --------- | ------------------------------- | ---- | ------------------------------------------------------------ |
| scriptURL | string | 是 | Worker执行脚本的路径。
<br/>
在FA和Stage模型下,DevEco Studio新建Worker工程路径分别存在以下两种情况:
<br/>
(a) worker脚本所在目录与pages目录同级。
<br/>
(b) worker脚本所在目录与pages目录不同级。 |
| options |
[
WorkerOptions
](
#workeroptions
)
| 否 | Worker构造的选项。 |
**返回值:**
| 类型 | 说明 |
| ------ | --------------------------------------------------------- |
| Worker | 执行Worker构造函数生成的Worker对象,失败则返回undefined。 |
**示例:**
```
js
import
worker
from
'
@ohos.worker
'
;
// worker线程创建
// FA模型-目录同级
const
workerFAModel01
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
,
{
name
:
"
first worker in FA model
"
});
// FA模型-目录不同级(以workers目录放置pages目录前一级为例)
const
workerFAModel02
=
new
worker
.
ThreadWorker
(
"
../workers/worker.js
"
);
// Stage模型-目录同级
const
workerStageModel01
=
new
worker
.
ThreadWorker
(
'
entry/ets/workers/worker.ts
'
,
{
name
:
"
first worker in Stage model
"
});
// Stage模型-目录不同级(以workers目录放置pages目录后一级为例)
const
workerStageModel02
=
new
worker
.
ThreadWorker
(
'
entry/ets/pages/workers/worker.ts
'
);
// 理解Stage模型scriptURL的"entry/ets/workers/worker.ts":
// entry: 为module.json5文件中module的name属性对应的值;
// ets: 表明当前使用的语言。
```
同时,需在工程的模块级build-profile.json5文件的buildOption属性中添加配置信息,主要分为下面两种情况:
(1) 目录同级
FA模型:
```
json
"buildOption"
:
{
"sourceOption"
:
{
"workers"
:
[
"./src/main/ets/MainAbility/workers/worker.ts"
]
}
}
```
Stage模型:
```
json
"buildOption"
:
{
"sourceOption"
:
{
"workers"
:
[
"./src/main/ets/workers/worker.ts"
]
}
}
```
(2) 目录不同级
FA模型:
```
json
"buildOption"
:
{
"sourceOption"
:
{
"workers"
:
[
"./src/main/ets/workers/worker.ts"
]
}
}
```
Stage模型:
```
json
"buildOption"
:
{
"sourceOption"
:
{
"workers"
:
[
"./src/main/ets/pages/workers/worker.ts"
]
}
}
```
### postMessage<sup>9+</sup>
postMessage(message: Object, options?: PostMessageOptions): void
向Worker线程发送数据,数据类型必须是序列化所支持的类型。序列化支持类型见其他说明。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
| message | Object | 是 | 发送至Worker的数据。 |
| options |
[
PostMessageOptions
](
#postmessageoptions
)
| 否 | 可转移对象是
ArrayBuffer
的实例对象。transferList数组中不可传入null。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
var
buffer
=
new
ArrayBuffer
(
8
);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
```
### on<sup>9+</sup>
on(type: string, listener: WorkerEventListener): void
向Worker添加一个事件监听。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------- | ---- | ---------------------- |
| type | string | 是 | 监听的事件类型。 |
| listener |
[
WorkerEventListener
](
#workereventlistener9
)
| 是是 | 回调的事件。回调事件。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
on
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
})
```
### once<sup>9+</sup>
once(type: string, listener: WorkerEventListener): void
向Worker添加一个事件监听,事件监听只执行一次便自动删除。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------- | ---- | ---------------------- |
| type | string | 是 | 监听的事件类型。 |
| listener |
[
WorkerEventListener
](
#workereventlistener9
)
| 是是 | 回调的事件。回调事件。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
once
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
})
```
### off<sup>9+</sup>
off(type: string, listener?: WorkerEventListener): void
删除类型为type的事件监听。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------- | ---- | ---------------------------- |
| type | string | 是 | 需要删除的事件类型。 |
| listener |
[
WorkerEventListener
](
#workereventlistener9
)
| 是否 | 回调的事件。删除的回调事件。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
off
(
"
alert
"
);
```
### terminate<sup>9+</sup>
terminate(): void
销毁Worker线程,终止Worker接收消息。
**系统能力:**
SystemCapability.Utils.Lang
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
terminate
();
```
### onexit<sup>9+</sup>
onexit?: (code: number) =
>
void
Worker对象的onexit属性表示Worker销毁时被调用的事件处理程序,处理程序在宿主线程中执行。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | ------------------ |
| code | number | 否 | Worker退出的code。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
onexit
=
function
(
e
)
{
console
.
log
(
"
onexit
"
);
}
```
### onerror<sup>9+</sup>
onerror?: (err: ErrorEvent) =
>
void
Worker对象的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------- | ---- | ---------- |
| err |
[
ErrorEvent
](
#errorevent
)
| 否 | 异常数据。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
onerror
=
function
(
e
)
{
console
.
log
(
"
onerror
"
);
}
```
### onmessage<sup>9+</sup>
onmessage?: (event: MessageEvent
\<
T>) =
>
void
Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worker通过parentPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------- | ---- | ---------------------- |
| event |
[
MessageEvent
](
#messageevent
)
| 否 | 收到的Worker消息数据。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
onmessage
=
function
(
e
)
{
// e : MessageEvent<T>, 用法如下:
// let data = e.data;
console
.
log
(
"
onmessage
"
);
}
```
### onmessageerror<sup>9+</sup>
onmessageerror?: (event: MessageEvent
\<
T>) =
>
void
Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------- | ---- | ---------- |
| event |
[
MessageEvent
](
#messageevent
)
| 否 | 异常数据。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
onmessageerror
=
function
(
e
)
{
console
.
log
(
"
onmessageerror
"
);
}
```
## WorkerEventTarget<sup>9+</sup>
### addEventListener<sup>9+</sup>
addEventListener(type: string, listener: WorkerEventListener): void
向Worker添加一个事件监听。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------- | ---- | ---------------- |
| type | string | 是 | 监听的事件类型。 |
| listener |
[
WorkerEventListener
](
#workereventlistener9
)
| 是 | 回调的事件。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
})
```
### removeEventListener<sup>9+</sup>
removeEventListener(type: string, callback?: WorkerEventListener): void
删除Worker的事件监听。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------- | ---- | ---------------------------- |
| type | string | 是 | 需要删除的监听事件类型。 |
| callback |
[
WorkerEventListener
](
#workereventlistener9
)
| 是否 | 回调的事件。删除的回调事件。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
removeEventListener
(
"
alert
"
);
```
使用以下方法前,均需先构造Worker实例,Worker类继承
[
EventTarget
](
#eventtarget
)
。
### dispatchEvent<sup>9+</sup>
### constructor
dispatchEvent(event: Event): boolean
分发定义在Worker的事件。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | --------------- | ---- | ---------------- |
| event |
[
Event
](
#event
)
| 是 | 需要分发的事件。 |
**返回值:**
| 类型 | 说明 |
| ------- | ------------------------------- |
| boolean | 分发的结果,false表示分发失败。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
dispatchEvent
({
type
:
"
alert
"
});
```
### removeAllListener<sup>9+</sup>
removeAllListener(): void
删除Worker所有的事件监听。
**系统能力:**
SystemCapability.Utils.Lang
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
removeAllListener
();
```
## ThreadWorkerGlobalScope<sup>9+</sup>
Worker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。DedicatedWorkerGlobalScope类继承
[
GlobalScope<sup>9+</sup>
](
#globalscope9
)
。
### postMessage<sup>9+</sup>
postMessage(messageObject: Object, options?: PostMessageOptions): void
Worker线程向宿主线程发送消息。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
| message | Object | 是 | 发送至宿主线程的数据。 |
| options |
[
PostMessageOptions
](
#postmessageoptions
)
| 否 | 可转移对象是ArrayBuffer的实例对象。transferList数组中不可传入null。 |
**示例:**
```
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
parentPort
=
worker
.
workerPort
;
parentPort
.
onmessage
=
function
(
e
){
// let data = e.data;
parentPort
.
postMessage
(
"
receive data from main.js
"
);
}
```
### close<sup>9+</sup>
close(): void
销毁Worker线程,终止Worker接收消息。
**系统能力:**
SystemCapability.Utils.Lang
**示例:**
```
js
// main.js
import
worker
from
'
@ohos.worker
'
;
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
()
}
```
### onmessage<sup>9+</sup>
onmessage?: (event: MessageEvent
\<
T>) =
>
void
DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------- | ---- | ------------------------ |
| event |
[
MessageEvent
](
#messageevent
)
| 否 | 收到宿主线程发送的数据。 |
**示例:**
```
js
// main.js
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
```
```
js
// worker.js
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
workerPort
;
parentPort
.
onmessage
=
function
(
e
)
{
console
.
log
(
"
receive main.js message
"
);
}
```
### onmessageerror<sup>9+</sup>
onmessageerror?: (event: MessageEvent
\<
T>) =
>
void
DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------- | ---- | ---------- |
| event |
[
MessageEvent
](
#messageevent
)
| 否 | 异常数据。 |
**示例:**
```
js
// main.js
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
```
```
js
// worker.js
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
workerPort
;
parentPort
.
onmessageerror
=
function
(
e
)
{
console
.
log
(
"
worker.js onmessageerror
"
)
}
```
## WorkerEventListener<sup>9+</sup>
(event: Event): void | Promise
<
void
>
事件监听类。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | --------------- | ---- | -------------- |
| event |
[
Event
](
#event
)
| 是 | 回调的事件类。 |
**返回值:**
| 类型 | 说明 |
| ------------------------------------- | ------------------------------- |
| void
\|
Promise
<
void
>
| 无返回值或者以Promise形式返回。 |
**示例:**
```
js
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
})
```
## GlobalScope<sup>9+</sup>
Worker线程自身的运行环境,WorkerGlobalScope类继承
[
WorkerEventTarget
](
#workereventtarget9
)
。
### 属性
**系统能力:**
SystemCapability.Utils.Lang
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| ---- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------- |
| name | string | 是 | 否 | Worker的名字,new
Worker时指定。 |
| self |
[
GlobalScope
](
#globalscope9
)
&
typeof
globalThis | 是 | 否 | GlobalScope本身。 |
### onerror<sup>9+</sup>
onerror?: (ev: ErrorEvent) =
>
void
GlobalScope的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在Worker线程中执行。
**系统能力:**
SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------- | ---- | ---------- |
| ev |
[
ErrorEvent
](
#errorevent
)
| 否 | 异常数据。 |
**示例:**
```
js
// main.js
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.js
"
)
```
```
js
// worker.js
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
workerPort
parentPort
.
onerror
=
function
(
e
){
console
.
log
(
"
worker.js onerror
"
)
}
```
## Worker<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker<sup>9+</sup>](#threadworker9)替代。
使用以下方法前,均需先构造Worker实例,Worker类继承
[
EventTarget
](
#eventtarget
)
。
### constructor<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.constructor<sup>9+</sup>](#constructor9)替代。
constructor(scriptURL: string, options?: WorkerOptions)
...
...
@@ -49,7 +674,7 @@ Worker构造函数。
| 参数名 | 类型 | 必填 | 说明 |
| --------- | ------------------------------- | ---- | ------------------------------------------------------------ |
| scriptURL | string | 是 | Worker执行脚本的路径。
<br/>
在FA和Stage模型下,DevEco Studio新建Worker工程路径分别存在以下两种情况:
<br/>
(a) worker脚本所在目录与pages目录同级。
<br/>
(b) worker脚本所在目录与pages目录不同级。
| scriptURL | string | 是 | Worker执行脚本的路径。
<br/>
在FA和Stage模型下,DevEco Studio新建Worker工程路径分别存在以下两种情况:
<br/>
(a) worker脚本所在目录与pages目录同级。
<br/>
(b) worker脚本所在目录与pages目录不同级。
|
| options |
[
WorkerOptions
](
#workeroptions
)
| 否 | Worker构造的选项。 |
**返回值:**
...
...
@@ -125,7 +750,10 @@ Stage模型:
}
}
```
### postMessage
### postMessage<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.postMessage<sup>9+</sup>](#postmessage9)替代。
postMessage(message: Object, options?: PostMessageOptions): void
...
...
@@ -152,7 +780,10 @@ workerInstance.postMessage(buffer, [buffer]);
```
### on
### on<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.on<sup>9+</sup>](#on9)替代。
on(type: string, listener: EventListener): void
...
...
@@ -165,7 +796,7 @@ on(type: string, listener: EventListener): void
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------- | ---- | ---------------- |
| type | string | 是 | 监听的事件类型。 |
| listener |
[
EventListener
](
#eventlistener
)
| 是 | 回调事件。 |
| listener |
[
EventListener
](
#eventlistener
)
| 是 | 回调事件。
|
**示例:**
...
...
@@ -177,7 +808,10 @@ workerInstance.on("alert", (e)=>{
```
### once
### once<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.once<sup>9+</sup>](#once9)替代。
once(type: string, listener: EventListener): void
...
...
@@ -190,7 +824,7 @@ once(type: string, listener: EventListener): void
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------- | ---- | ---------------- |
| type | string | 是 | 监听的事件类型。 |
| listener |
[
EventListener
](
#eventlistener
)
| 是 | 回调事件。 |
| listener |
[
EventListener
](
#eventlistener
)
| 是 | 回调事件。
|
**示例:**
...
...
@@ -202,7 +836,10 @@ workerInstance.once("alert", (e)=>{
```
### off
### off<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.off<sup>9+</sup>](#off9)替代。
off(type: string, listener?: EventListener): void
...
...
@@ -212,10 +849,10 @@ off(type: string, listener?: EventListener): void
**参数:**
| 参数名 | 类型 | 必填 | 说明
|
| -------- | ------------------------------- | ---- | --------------------
--
|
| type | string | 是 | 需要删除的事件类型。
|
| listener |
[
EventListener
](
#eventlistener
)
| 否 | 删除的回调事件。
|
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------- | ---- | -------------------- |
| type | string | 是 | 需要删除的事件类型。 |
| listener |
[
EventListener
](
#eventlistener
)
| 否 | 删除的回调事件。 |
**示例:**
...
...
@@ -225,7 +862,10 @@ workerInstance.off("alert");
```
### terminate
### terminate<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.terminate<sup>9+</sup>](#terminate9)替代。
terminate(): void
...
...
@@ -241,7 +881,10 @@ workerInstance.terminate();
```
### onexit
### onexit<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.onexit<sup>9+</sup>](#onexit9)替代。
onexit?: (code: number) =
>
void
...
...
@@ -265,7 +908,10 @@ workerInstance.onexit = function(e) {
```
### onerror
### onerror<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.onerror<sup>9+</sup>](#onerror9)替代。
onerror?: (err: ErrorEvent) =
>
void
...
...
@@ -289,7 +935,10 @@ workerInstance.onerror = function(e) {
```
### onmessage
### onmessage<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.onmessage<sup>9+</sup>](#onmessage9)替代。
onmessage?: (event: MessageEvent
\<
T>) =
>
void
...
...
@@ -315,7 +964,10 @@ workerInstance.onmessage = function(e) {
```
### onmessageerror
### onmessageerror<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorker.onmessageerror<sup>9+</sup>](#onmessageerror9)替代。
onmessageerror?: (event: MessageEvent
\<
T>) =
>
void
...
...
@@ -339,10 +991,14 @@ workerInstance.onmessageerror= function(e) {
```
## EventTarget
## EventTarget<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[WorkerEventTarget<sup>9+</sup>](#workereventtarget9)替代。
### addEventListener<sup>(deprecated)</sup>
### addEventListener
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[addEventListener<sup>9+</sup>](#addeventlistener9)替代。
addEventListener(type: string, listener: EventListener): void
...
...
@@ -367,7 +1023,10 @@ workerInstance.addEventListener("alert", (e)=>{
```
### removeEventListener
### removeEventListener<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[removeEventListener<sup>9+</sup>](#removeeventlistener9)替代。
removeEventListener(type: string, callback?: EventListener): void
...
...
@@ -377,10 +1036,10 @@ removeEventListener(type: string, callback?: EventListener): void
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------- | ---- | ---------------------- |
| 参数名 | 类型 | 必填 | 说明
|
| -------- | ------------------------------- | ---- | ----------------------
--
|
| type | string | 是 | 需要删除的监听事件类型。 |
| callback |
[
EventListener
](
#eventlistener
)
| 否 | 删除的回调事件。 |
| callback |
[
EventListener
](
#eventlistener
)
| 否 | 删除的回调事件。
|
**示例:**
...
...
@@ -390,7 +1049,10 @@ workerInstance.removeEventListener("alert");
```
### dispatchEvent
### dispatchEvent<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[dispatchEvent<sup>9+</sup>](#dispatchevent9)替代。
dispatchEvent(event: Event): boolean
...
...
@@ -418,7 +1080,10 @@ workerInstance.dispatchEvent({type:"alert"});
```
### removeAllListener
### removeAllListener<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[removeAllListener<sup>9+</sup>](#removealllistener9)替代。
removeAllListener(): void
...
...
@@ -434,12 +1099,18 @@ workerInstance.removeAllListener();
```
## DedicatedWorkerGlobalScope
## DedicatedWorkerGlobalScope<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>](#threadworkerglobalscope9)替代。
Worker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。DedicatedWorkerGlobalScope类继承
[
WorkerGlobalScope
](
#workerglobalscope
)
。
### postMessage
### postMessage<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>](#threadworkerglobalscope9).postMessage<sup>9+</sup>替代。
postMessage(messageObject: Object, options?: PostMessageOptions): void
...
...
@@ -451,7 +1122,7 @@ Worker线程向宿主线程发送消息。
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
| message | Object | 是 | 发送至宿主线程的数据。
|
| message | Object | 是 | 发送至宿主线程的数据。 |
| options |
[
PostMessageOptions
](
#postmessageoptions
)
| 否 | 可转移对象是ArrayBuffer的实例对象。transferList数组中不可传入null。 |
**示例:**
...
...
@@ -477,7 +1148,10 @@ parentPort.onmessage = function(e){
```
### close
### close<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>](#threadworkerglobalscope9).close<sup>9+</sup>替代。
close(): void
...
...
@@ -502,7 +1176,10 @@ parentPort.onmessage = function(e) {
```
### onmessage
### onmessage<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>](#threadworkerglobalscope9).onmessage<sup>9+</sup>替代。
onmessage?: (event: MessageEvent
\<
T>) =
>
void
...
...
@@ -512,8 +1189,8 @@ DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------- | ---- | ---------------------- |
| 参数名 | 类型 | 必填 | 说明
|
| ------ | ----------------------------- | ---- | ----------------------
--
|
| event |
[
MessageEvent
](
#messageevent
)
| 否 | 收到宿主线程发送的数据。 |
**示例:**
...
...
@@ -534,7 +1211,10 @@ parentPort.onmessage = function(e) {
```
### onmessageerror
### onmessageerror<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>](#threadworkerglobalscope9).onmessageerror<sup>9+</sup>替代。
onmessageerror?: (event: MessageEvent
\<
T>) =
>
void
...
...
@@ -588,7 +1268,10 @@ parentPort.onmessageerror= function(e) {
| timeStamp | number | 是 | 否 | 事件创建时的时间戳(精度为毫秒)。 |
## EventListener
## EventListener<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[WorkerEventListener<sup>9+</sup>](#workereventlistener9)替代。
(evt: Event): void | Promise
<
void
>
...
...
@@ -644,7 +1327,10 @@ workerInstance.addEventListener("alert", (e)=>{
| data | T | 是 | 否 | 线程间传递的数据。 |
## WorkerGlobalScope
## WorkerGlobalScope<sup>(deprecated)</sup>
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[GlobalScope<sup>9+</sup>](#globalscope9)替代。
Worker线程自身的运行环境,WorkerGlobalScope类继承
[
EventTarget
](
#eventtarget
)
。
...
...
@@ -652,13 +1338,16 @@ Worker线程自身的运行环境,WorkerGlobalScope类继承[EventTarget](#eve
**系统能力:**
SystemCapability.Utils.Lang
| 名称 | 参数类型 | 可读 | 可写 | 说明
|
| ---- | ------------------------------------------------------------ | ---- | ---- | -------------------------------------
--
|
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| ---- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------- |
| name | string | 是 | 否 | Worker的名字,new
Worker时指定。 |
| self |
[
WorkerGlobalScope
](
#workerglobalscope
)
&
typeof
globalThis | 是 | 否 | WorkerGlobalScope本身。 |
| self |
[
WorkerGlobalScope
](
#workerglobalscope
)
&
typeof
globalThis | 是 | 否 | WorkerGlobalScope本身。 |
### onerror<sup>(deprecated)</sup>
### onerror
> **说明:**<br/>
> 从API version 9开始废弃,建议使用[GlobalScope<sup>9+</sup>](#globalscope9).onerror替代。
onerror?: (ev: ErrorEvent) =
>
void
...
...
@@ -688,27 +1377,31 @@ parentPort.onerror = function(e){
}
```
## 其他说明
### 序列化支持类型
| Type
| 备注 | 是否支持
|
| ------------------
- | -------------------------------------------------------- | ------------
-------- |
| All Primitive Type
| 不包括symbol | 是
|
| Date
| | 是
|
| String
| | 是
|
| RegExp
| | 是
|
| Array
| | 是
|
| Map
| | 是
|
| Set
| | 是
|
| Object
| 只支持Plain Object,不支持带function的 | 是
|
| ArrayBuffer
| 提供transfer能力 | 是
|
| TypedArray
| | 是
|
| Type
| 备注 | 是否支持
|
| ------------------
| -------------------------------------- |
-------- |
| All Primitive Type
| 不包括symbol | 是
|
| Date
| | 是
|
| String
| | 是
|
| RegExp
| | 是
|
| Array
| | 是
|
| Map
| | 是
|
| Set
| | 是
|
| Object
| 只支持Plain Object,不支持带function的 | 是
|
| ArrayBuffer
| 提供transfer能力 | 是
|
| TypedArray
| | 是
|
特例:传递通过自定义class创建出来的object时,不会发生序列化错误,但是自定义class的属性(如Function)无法通过序列化传递。
> **说明:**<br/>
> 以API version 9的FA工程为例。
```
js
// main.js
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.js
"
);
const
workerInstance
=
new
worker
.
Thread
(
"
workers/worker.js
"
);
workerInstance
.
postMessage
(
"
message from main to worker
"
);
workerInstance
.
onmessage
=
function
(
d
)
{
// 当worker线程传递obj2时,data即为obj2。data没有Init、SetName的方法
...
...
@@ -718,7 +1411,7 @@ workerInstance.onmessage = function(d) {
```
js
// worker.js
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
parent
Port
;
const
parentPort
=
worker
.
worker
Port
;
class
MyModel
{
Init
()
{
this
.
name
=
"
wzy
"
...
...
@@ -761,18 +1454,26 @@ Actor并发模型的交互原理:各个Actor并发地处理主线程任务,
### 注意事项
-
Worker存在数量限制,当前支持最多同时存在7个Worker。
-
当Worker数量超出限制,会出现Error "Too many workers, the number of workers exceeds the maximum."。
-
在API version 8及之前的版本,当Worker数量超出限制时,会抛出错误Error "Too many workers, the number of workers exceeds the maximum."。
-
从API version 9开始,当Worker数量超出限制时,会抛出错误BusinessError "Worker initialization failure, the number of workers exceeds the maximum"。
-
主动销毁Worker可以调用新创建Worker对象的terminate()或parentPort.close()方法。
-
自API version 9版本开始,若Worker处于已经销毁或正在销毁等非运行状态时,调用其功能接口,会抛出相应的BusinessError。
-
Worker的创建和销毁耗费性能,建议管理已创建的Worker并重复使用。
## 完整示例
> **说明:**<br/>
> 以API version 9的工程为例。<br> API version 8及之前的版本仅支持FA模型,如需使用,注意更换构造Worker的接口和创建worker线程中与主线程通信的对象的两个方法。
### FA模型
```
js
// main.js(同级目录为例)
import
worker
from
'
@ohos.worker
'
;
// 主线程中创建Worker对象
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Thread
Worker
(
"
workers/worker.ts
"
);
// 创建js和ts文件都可以
// const workerInstance = new worker.ThreadWorker("workers/worker.js");
// API version 9之前版本,worker对象的构造方法
// const workerInstance = new worker.Worker("workers/worker.js");
// 主线程向worker线程传递信息
...
...
@@ -798,7 +1499,10 @@ workerInstance.onexit = function() {
import
worker
from
'
@ohos.worker
'
;
// 创建worker线程中与主线程通信的对象
const
parentPort
=
worker
.
parentPort
const
parentPort
=
worker
.
workerPort
// API version 9之前版本,创建worker线程中与主线程通信的对象
// const parentPort = worker.parentPort
// worker线程接收主线程信息
parentPort
.
onmessage
=
function
(
e
)
{
...
...
@@ -831,9 +1535,9 @@ build-profile.json5 配置 :
import
worker
from
'
@ohos.worker
'
;
// 主线程中创建Worker对象
const
workerInstance
=
new
worker
.
Worker
(
"
entry/ets/pages/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Thread
Worker
(
"
entry/ets/pages/workers/worker.ts
"
);
// 创建js和ts文件都可以
// const workerInstance = new worker.Worker("entry/ets/pages/workers/worker.js");
// const workerInstance = new worker.
Thread
Worker("entry/ets/pages/workers/worker.js");
// 主线程向worker线程传递信息
workerInstance
.
postMessage
(
"
123
"
);
...
...
@@ -857,7 +1561,7 @@ workerInstance.onexit = function() {
import
worker
from
'
@ohos.worker
'
;
// 创建worker线程中与主线程通信的对象
const
parentPort
=
worker
.
parent
Port
const
parentPort
=
worker
.
worker
Port
// worker线程接收主线程信息
parentPort
.
onmessage
=
function
(
e
)
{
...
...
@@ -883,4 +1587,4 @@ build-profile.json5 配置:
]
}
}
```
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录