@drumtj/task-queue
v1.0.34
Published
task manager queue
Downloads
8
Maintainers
Readme
Task Queue
task management queue
Features
Installing
Using npm:
$ npm install @drumtj/task-queue
Using cdn:
<script src="https://unpkg.com/@drumtj/[email protected]/dist/task-queue.js"></script>
Using amd, commonjS Module
const TaskQueue = require('@drumtj/task-queue');
import TaskQueue from '@drumtj/task-queue';
How To
ex) image list loader
make sample data
var url = "https://as.ftcdn.net/r/v1/pics/2fd8819a419c4245e5429905770db4b570661f48/home/discover_collections/Images.jpg";
//sample data
var urls = new Array(5).fill(url).map(v=>v+"?r="+(Math.floor(Math.random()*10000)));
define callback (use promise)
//process callback function
function load(url){
console.error("load", url);
return new Promise(resolve=>{
let img = new Image();
img.onload = ()=>resolve(img);
img.src = url;
})
}
//process complete callback function
function loaded(img){
console.error("loaded", img);
}
//complete callback function
function allLoaded(result){
console.error("all loaded", result);
}
direct return case
//process callback function
async function load(url, param){
console.error("load", url);
let img = await new Promise(resolve=>{
let img = new Image();
img.onload = ()=>resolve(img);
img.src = url;
})
return img;
}
use TaskQueue
// new TaskQueue(urls, load).process();
// new TaskQueue(urls, load, loaded).process();
// new TaskQueue(urls, load, null, allLoaded).process();
new TaskQueue(urls, load, loaded, allLoaded).process(-1); //call for sequencable
other usecase
let queue = new TaskQueue();
queue.pushFromArray(urls);
queue.setProcessCallback(load);
queue.setProcessCompleteCallback(loaded);
queue.setCompleteCallback(allLoaded);
//call for one step
queue.process();
//call for one step with param
queue.process(1, "param");
//call for two step
queue.process(2);
//call for sequential step
queue.process(-1);
//It is processed by traversing all data in all lists in a way that minimizes CPU locks.
queue.sequentialProcess();
// queue.sequentialProcess(2, "param"); //minSequenceUnit, param
data management
let priority = true;//optional; -> when is true data is inserted at the beginning of the internal queue
let key = queue.push("data", priority);
let keys = queue.pushFromArray(["data1", "data2"], priority);
//// push from Mapx
// import Mapx from "@drumtj/mapx";
// var map = new Mapx();
// queue.pushFromMapx(map) // return keys;
queue.set("key1", "data1", priority);
let data = queue.get("key1");
let has = queue.has("key1");
let data2 = queue.shift(); //Extract first data and remove from array
queue.delete("key1");
queue.destroy(); //destroy
queue.reset();//destroy and init
Examples
License
MIT