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 --saveversion
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.