Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
b9c90d02
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
b9c90d02
编写于
10月 20, 2022
作者:
O
openharmony_ci
提交者:
Gitee
10月 20, 2022
浏览文件
操作
浏览文件
下载
差异文件
!10739 add special case for worker.postMessage
Merge pull request !10739 from wangzhaoyong/master
上级
eb5a6a27
b44f71b0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
50 addition
and
0 deletion
+50
-0
zh-cn/application-dev/reference/apis/js-apis-worker.md
zh-cn/application-dev/reference/apis/js-apis-worker.md
+50
-0
未找到文件。
zh-cn/application-dev/reference/apis/js-apis-worker.md
浏览文件 @
b9c90d02
...
...
@@ -704,6 +704,56 @@ parentPort.onerror = function(e){
| ArrayBuffer | 提供transfer能力 | 是 |
| TypedArray | | 是 |
特例:传递通过自定义class创建出来的object时,不会发生序列化错误,但是自定义class的属性(如Function)无法通过序列化传递。
```
js
// main.js
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.js
"
);
workerInstance
.
postMessage
(
"
message from main to worker
"
);
workerInstance
.
onmessage
=
function
(
d
)
{
// 当worker线程传递obj2时,data即为obj2。data没有Init、SetName的方法
let
data
=
d
.
data
;
}
```
```
js
// worker.js
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
parentPort
;
class
MyModel
{
Init
()
{
this
.
name
=
"
wzy
"
this
.
age
=
18
}
SetName
()
{
this
.
name
=
"
WZY
"
}
}
parentPort
.
onmessage
=
function
(
d
)
{
console
.
log
(
"
worker.js onmessage
"
);
let
data
=
d
.
data
;
let
func1
=
function
()
{
console
.
log
(
"
post message is function
"
);
}
let
obj1
=
{
"
index
"
:
2
,
"
name1
"
:
"
zhangshan
"
,
setName
()
{
this
.
index
=
3
;
}
}
let
obj2
=
new
MyModel
();
// parentPort.postMessage(func1); 传递func1发生序列化错误
// parentPort.postMessage(obj1); 传递obj1发生序列化错误
parentPort
.
postMessage
(
obj2
);
// 传递obj2不会发生序列化错误
}
parentPort
.
onmessageerror
=
function
(
e
)
{
console
.
log
(
"
worker.js onmessageerror
"
);
}
parentPort
.
onerror
=
function
(
e
)
{
console
.
log
(
"
worker.js onerror
"
);
}
```
### 内存模型
Worker基于Actor并发模型实现。在Worker的交互流程中,JS主线程可以创建多个Worker子线程,各个Worker线程间相互隔离,并通过序列化传递对象,等到Worker线程完成计算任务,再把结果返回给主线程。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录