@drumtj/task-queue

1.0.34 • Public • Published

Task Queue

npm version license

task management queue

Features

Installing

Using npm:

$ npm install @drumtj/task-queue

Using cdn:

<script src="https://unpkg.com/@drumtj/task-queue@1.0.34/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

Package Sidebar

Install

npm i @drumtj/task-queue

Weekly Downloads

1

Version

1.0.34

License

MIT

Unpacked Size

220 kB

Total Files

8

Last publish

Collaborators

  • drumtj