[API接口文档]: ./api/index.md
[动态Worker的设计与机制]: ./动态Worker的设计与机制.md


> 本文只简单教下 动态 Worker 使用方法，如果想深入原理，请看[动态Worker的设计与机制][]，其它的工具请看 [API接口文档][]；


**目录：**  

<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=true} -->

<!-- code_chunk_output -->

1. [创建动态Worker](#创建动态worker)
2. [调用命令](#调用命令)
3. [添加新的命令](#添加新的命令)
4. [删除命令](#删除命令)
5. [注意事项](#注意事项)

<!-- /code_chunk_output -->


---------


# 创建动态Worker

1. 定义需要在 Worker 中运行的命令：所谓的命令 可以是函数，也可以是一个数据对象。
```ts
// 加
function add(a:number,b:number){
  return a + b;
}

// 减，匿名函数
const subtract = function(a:number,b:number){
  return a - b;
}
```

2. 创建动态Worker
```ts
const dWorker = createDynamicWorker({
  named:[
    add,
    /**
     * 匿名函数 必须要指定命令的名字
     */
    {
      name: "subtract",
      fun:subtract
    }
  ]
});
```

# 调用命令
```ts
const addRes = await dWorker.add(3,2);  // 5
const subRes = await dWorker.subtract(3,2);  // 1
```


# 添加新的命令
```ts
dWorker.multiply = function multiply(a:number,b:number){
  return a * b;
};
```

调用新添加的命令
```ts
const multRes = await dWorker.multiply(3,2); // 6
```

# 删除命令
```ts
// 删除 add 命令
delete dWorker.add
```



# 注意事项
- 如果函数引用了外部的变量，则 该函数 及其 引用到的外部变量 都需要添加到 Worker 中；
- 在使用 `createDynamicWorker()` 创建 动态Worker 时，会自给 `named` 选项中的命令在 动态Worker对象上 生成相应的快捷命令；
- 在第一次向动态Worker的代理对象上访问某个命令时，如果该动态Worker对象上不存在该命令的快捷命令，则会在该动态Worker对象上自动添加对应的快捷命令；
- 快捷命令的返回值总是异步的。
- 命令的返回结果可以是异步的（如：`Promise`），也可以是流（如：`ReadableStream`），也可以是 `Promise` 和 流的相互组合，如：异步的流 `Promise<ReadableStream>`，数据块是 `Promise<any>`的流 `ReadableStream<Promise<any>>`，或 数据块是异步的异步流 `Promise<ReadableStream<Promise<any>>>`；