Skip to content

Commit

Permalink
Merge pull request #11 from TNT-03/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
TNT-03 committed Apr 2, 2023
2 parents e6a5866 + b3bacc5 commit 06428f5
Show file tree
Hide file tree
Showing 18 changed files with 1,013 additions and 1,326 deletions.
12 changes: 1 addition & 11 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
{
"presets": [
"@babel/preset-typescript",
[
"@babel/preset-env",
{

"modules": false
}
]
]
// "presets": ["@babel/preset-env", {"targets": {"node": "current"}}]
"presets": ["@babel/preset-env"]
}

4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
node_modules
.DS_Store
examples/
test/
dist
demo
taskOrder.test.js
demo
170 changes: 93 additions & 77 deletions README-zh_CN.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# async-task-mapping
它可以做出promise无法完成的异步任务,可以无视发送和接收的顺序,允许绑定pending状态的异步任务,允许在多个函数内共同触发一个任务,并且支持生产者-消费者模式和订单模式。

它可以做出 promise 无法完成的异步任务,可以无视发送和接收的顺序,允许绑定 pending 状态的异步任务,允许在多个函数内共同触发一个任务,并且支持生产者-消费者模式和订单模式。

[English](./README.md) | 简体中文

## 使用之前
async-task-mapping工具没有使用任何第三方依赖包,不会限制技术栈。

async-task-mapping 工具没有使用任何第三方依赖包,不会限制技术栈。

## 安装

Expand All @@ -12,105 +15,118 @@ npm i async-task-mapping --save
```

## 使用方法
### 使用 createTaskList

```javascript
import { createTaskList } from 'async-task-mapping';
const asyncTask = createTaskList({ordered: true, requestCount: 2, responseCount: 2})

setTimeout(async () => {
// 这里返回一个Promise.resolve,你可以使用async/await或者.then.
const data = await asyncTask.request()
console.log('data-1', data)
}, 100)

setTimeout(async () => {
const data = await asyncTask.request(() => console.log('request-2'))
console.log('data-2', data)
}, 200)

setTimeout(() => {
asyncTask.pushResponse('response1')
}, 300)
### 使用 createTaskList

setTimeout(() => {
asyncTask.pushResponse('response2')
}, 400)
版本 1.0.0-beta

```javascript
import { createTaskList } from "async-task-mapping";
const asyncTask = createTaskList({
ordered: true,
taskCount: 2,
resolveCount: 2,
});

setTimeout(async () => {
// 这里返回一个Promise.resolve,你可以使用async/await或者.then.
const { list, dataMap } = await asyncTask;
console.log("data-1", list[0]);
// 或者
asyncTask.then(({ list, dataMap }) => {
console.log("data-1", list[0]);
});
}, 100);

setTimeout(async () => {
const { list, dataMap } = await asyncTask;
console.log("data-2", dataMap.res2);
}, 200);

setTimeout(() => {
asyncTask.pushResolve("response1");
}, 300);

setTimeout(() => {
asyncTask.pushResolve("response2", "res2");
}, 400);
```

你可以在不同函数中使用这些方法. 以上代码执行结果为:

```javascript
// time 200: request-2
// time 300: data-1 response1
// time 400: data-2 response2
```
#### createTaskList实例化过程中传入的参数

| 名称 | 描述 | 默认值 |
| ---- | ---- | ---- |
| ordered | 是否为有序 | false |
| requestCount | 读取数据的次数 | 1 |
| responseCount | 增加数据的次数 | 1 |
#### createTaskList 实例化过程中传入的参数

#### createTaskList实例上的方法
| 名称 | 描述 | 默认值 |
| ------------ | -------------- | ------ |
| ordered | 是否为有序 | false |
| taskCount | 读取数据的次数 | 1 |
| resolveCount | 增加数据的次数 | 1 |

| 名称 | 描述 | 返回值的数据结构 |
| ---- | ---- | ---- |
| request | 接收的方法,可以传入一个立即执行的函数 | Promise类型, 如果responseCount为1,<br>得到的data是pushResponse的原数据,<br> 如果responseCount大于1,将得到一个数组 |
| pushResponse | 增加数据的方法 | -- |
| clear | 清空所有的状态 | -- |
| paused (v0.1.0) | 暂停任务 | -- |
| running (v0.1.0) | 继续匹配任务 | -- |
| getStatus | 获取当前状态 | {<br>&nbsp;&nbsp; requestDone: false (是否完成所有的request绑定), <br>&nbsp;&nbsp; responseDone: false (是否完成所有的pushResponse), <br>&nbsp;&nbsp; requestCount: 1 (已绑定的request数量),<br>&nbsp;&nbsp; responseCount: 1 (已完成的pushResponse数量)<br>} |
#### createTaskList 实例上的方法

| 名称 | 描述 | 返回值的数据结构 |
| ----------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| then\* | promise 上原有的方法 | task.then(({list, dataMap})=>{}) |
| pushResolve | 增加数据的方法 | pushResolve(data, name), 非必填,Promise.resolve 的数据 |
| clear | 清空所有的状态 | -- |
| paused | 暂停任务 | -- |
| running | 继续匹配任务 | -- |
| getStatus | 获取当前状态 | {<br>&nbsp;&nbsp; requestDone: false (是否完成所有的 request 绑定), <br>&nbsp;&nbsp; responseDone: false (是否完成所有的 pushResolve), <br>&nbsp;&nbsp; requestCount: 1 (已绑定的 request 数量),<br>&nbsp;&nbsp; responseCount: 1 (已完成的 pushResolve 数量)<br>} |

### 使用 createTaskOrder

request和response可以不按照顺序绑定.
```javascript
import { createTaskOrder } from 'async-task-mapping';
const taskOrder = createTaskOrder()

setTimeout(async () => {
// 这里返回一个Promise.resolve,你可以使用async/await或者.then.
const data = await taskOrder.request()
console.log('data1', data)
}, 230)

setTimeout(async () => {
const data = await taskOrder.request(() => console.log('request 2'))
console.log('data2', data)
}, 500)
setTimeout( () => {
taskOrder.pushResponse('Response1')
}, 200)
setTimeout(() => {
taskOrder.pushResponse('Response2')
}, 300)
setTimeout(() => {
taskOrder.pushResponse('Response3')
}, 400)
request 和 response 可以不按照顺序绑定.

```javascript
import { createTaskOrder } from "async-task-mapping";
const taskOrder = createTaskOrder({ order: false });

setTimeout(async () => {
// 这里返回一个Promise.resolve,你可以使用async/await或者.then.
const data = await taskOrder;
console.log("data1", data);
}, 230);

setTimeout(async () => {
const data = await taskOrder;
console.log("data2", data);
}, 500);
setTimeout(() => {
resolve;
taskOrder.pushResolve("resolve1");
}, 200);
setTimeout(() => {
taskOrder.pushResolve("resolve2");
}, 300);
setTimeout(() => {
taskOrder.pushResolve("resolve3");
}, 400);
```

你可以在不同函数中使用这些方法. 以上代码执行结果为:

```javascript
// time 230: data1 Response1
// time 500: data2 Response2
// time 230: data1 resolve1
// time 500: data2 resolve2
```

#### createTaskOrder实例上的方法

| 名称 | 描述 | 返回值的数据结构 |
| ---- | ---- | ---- |
| request | 接收数据的方法,可以传入一个立即执行的函数 | Promise类型, 得到的data是pushResponse的原数据 |
| pushResponse | 增加数据的方法 | -- |
| clear | 清空所有的状态 | -- |
| paused (v0.1.0) | 暂停任务 | -- |
| running (v0.1.0) | 继续匹配任务 | -- |
| getStatus | 获取当前状态 | {<br>&nbsp;&nbsp; pendingRequests: 0 (未完成匹配的request数量), <br>&nbsp;&nbsp; pendingResponses: 0 (未完成匹配的response数量)<br>} |
| getLastCompletedTask<br>(v0.1.0) | 获取最后一个request与response完成匹配的数据 | -- |
#### createTaskOrder 实例上的方法

| 名称 | 描述 | 返回值的数据结构 |
| ------------------------ | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| pushResolve | 增加数据的方法 | -- |
| clear | 清空所有的状态 | -- |
| paused | 暂停任务 | -- |
| running | 继续匹配任务 | -- |
| getStatus | 获取当前状态 | {<br>&nbsp;&nbsp; pendingRequests: 0 (未完成匹配的 request 数量), <br>&nbsp;&nbsp; pendingResponses: 0 (未完成匹配的 response 数量)<br>} |
| getLastCompletedTask<br> | 获取最后一个 request 与 response 完成匹配的数据 | -- |

### 开源协议

[MIT](./LICENSE).
[MIT](./LICENSE).
Loading

0 comments on commit 06428f5

Please sign in to comment.