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 | 简体中文
The async-task-mapping library does not use any third-party dependency packages and does not limit the technology stack.
npm i async-task-mapping --save
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
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 |
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) } |
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
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 | -- |
MIT.