Skip to content

Files

Latest commit

4f2c76e · Apr 3, 2023

History

History
131 lines (100 loc) · 8.77 KB

README.md

File metadata and controls

131 lines (100 loc) · 8.77 KB

async-task-mapping

It can make asynchronous tasks that promise cannot complete, ignore the order of sending and receiving, allow binding of asynchronous tasks in pending status, allow triggering a task in multiple functions, and support producer consumer mode and order mode.

English | 简体中文

Pre-requisites

The async-task-mapping library does not use any third-party dependency packages and does not limit the technology stack.

Install

npm i async-task-mapping --save

Usage

use createTaskList

version

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

setTimeout(async () => {
  // A Promise.resolve is returned here. You can use either async/await or .then.
  const { list, dataMap } = await asyncTask;
  console.log("data-1", list[0]);
  // or
  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);

You can use these functions in different methods. The result of the above code is:

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

Parameters passed in during createTaskList instantiation

name description default
ordered Is it orderly false
taskCount Number of times to access data 1
resolveCount Increase the number of times of data 1

Methods on createTaskList Instances

name description returned data structure
then* The original method of promise task.then(({list, dataMap})=>{})
pushResolve Used to add data pushResolve(data, name), Not required, data of Promise.resolve
clear Clear all statuses --
paused pause task --
running continue matching tasks --
getStatus Get current status {
  // Whether to complete all request binding
   requestDone: false,
  // Whether to complete all pushResolve
   responseDone: false,
   //Number of requests bound
   requestCount: 1 (Number of requests bound),
   // Number of pushResolve complete
  responseCount: 1 (Number of pushResolve completed)
}

use createTaskOrder

The request and response can be out of order.

import { createTaskOrder } from "async-task-mapping";
const taskOrder = createTaskOrder();

setTimeout(async () => {
  // A Promise.resolve is returned here. You can use either async/await or .then.
  const data = await taskOrder;
  console.log("data1", data);
}, 230);

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

You can use these functions in different methods. The result of the above code is:

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

Methods on createTaskOrder Instances

name description returned data structure
pushResolve Used to add data --
clear Clear all statuses --
paused pause task --
running continue matching tasks --
getStatus Get current status {
  //Number of incomplete matching requests
  pendingRequests: 0,
  //Number of responses that have not completed matching
  pendingResponses: 0
}
getLastCompletedTask Get the data matching the last request with the response --

License

MIT.