Skip to content

Latest commit

 

History

History
132 lines (101 loc) · 6.8 KB

README-zh_CN.md

File metadata and controls

132 lines (101 loc) · 6.8 KB

async-task-mapping

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

English | 简体中文

使用之前

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

安装

npm i async-task-mapping --save

使用方法

使用 createTaskList

版本

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);

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

// time 200: request-2
// time 300: data-1 response1
// time 400: data-2 response2

createTaskList 实例化过程中传入的参数

名称 描述 默认值
ordered 是否为有序 false
taskCount 读取数据的次数 1
resolveCount 增加数据的次数 1

createTaskList 实例上的方法

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

使用 createTaskOrder

request 和 response 可以不按照顺序绑定.

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);

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

// time 230: data1 resolve1
// time 500: data2 resolve2

createTaskOrder 实例上的方法

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

开源协议

MIT.