async-task-mapping
async-task-mapping copied to clipboard
It can flexibly control async task, ignore the order of sending and receiving, allow binding of asynchronous tasks in pending state, and support producer consumer mode and order mode
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.