js-queue Is Great for any queue
- socket message queuing
- async operations
- synchronous operations
- atomic operations
- code with requirements before executing
- queues you want to start running any time you add new items
- any simple or complex queue operations
- base class to extend
- anything else that needs a queue
- Anything which needs a stack instead of a queue.
Stable and easy to use
Works great in node.js, webpack, browserify, or any other commonjs loader or compiler. To use in plain old vanilla browser javascript without common js just replace the requires in the examples with script tags. We show that below too.
js-queue
also exposes the easy-stack
stack via require('js-queue/stack.js')
this file exposes an ES6 stack which allows for Last In First Out (LIFO) queuing. This can come in handy depending on your application needs, check out the easy-stack javascript documentation it follows the js-queue
interface but is node 6 or greater as it uses ES6 classes.
npm install js-queue
npm info : See npm trends and stats for js-queue
GitHub info :
Package details websites :
This work is licenced via the MIT Licence.
Exposed methods and values
key | type | paramaters | default | description |
---|
add | function | any number of functions | | adds all parameter functions to queue and starts execution if autoRun is true, queue is not already running and queue is not forcibly stopped |
next | function | | | executes next item in queue if queue is not forcibly stopped |
clear | function | | | removes remaining items in the queue |
contents | Array | | | Queue instance contents |
autoRun | Bool | | true | should autoRun queue when new item added |
stop | Bool | | false | setting this to true will forcibly prevent the queue from executing |
Basic queue use in node, react, browserify, webpack or any other commonjs implementation
var Queue=require('js-queue');
var queue=new Queue;
for(var i=0; i<50; i++){
queue.add(makeRequest);
}
function makeRequest(){
console.log('making some request');
this.next();
}
Basic browser use
The only difference is including via a script tag instead of using require.
<html>
<head>
<script src='./queue-vanilla.js'></script>
<script>
console.log('my awesome app script');
var queue=new Queue;
for(var i=0; i<50; i++){
queue.add(makeRequest);
}
function makeRequest(){
console.log('making some request');
this.next();
}
</script>
</head>
<body>
</body>
</html>
Basic use with websockets in node, react, browserify, webpack or any other commonjs implementation
This allows you to start adding requests immediately and only execute if the websocket is connected. To use in plain browser based JS without webpack or browserify just replace the requires with the script tag.
var Queue=require('js-queue');
var WS=require('ws-share');
var Message=require('js-message');
var queue=new Queue;
queue.stop=true;
var ws=null;
function startWS(){
ws=new WS('wss://echo.websocket.org/?encoding=text');
ws.on(
'open',
function(){
ws.on(
'message',
handleResponse
);
queue.stop=false;
queue.next();
}
);
ws.on(
'error',
function(err){
queue.stop=true;
queue.clear();
throw(err);
}
);
ws.on(
'close',
function(){
queue.stop=true;
}
);
}
for(var i=0; i<50; i++){
queue.add(makeRequest);
}
var messageID=0;
function handleResponse(e){
var message=new Message;
message.load(e.data);
console.log(message.type,message.data);
}
function makeRequest(){
messageID++;
var message=new Message;
message.type='testMessage';
message.data=messageID;
ws.send(message.JSON);
this.next();
}
startWS();
Extending Queue
var Queue=require('js-queue');
MyAwesomeQueue.prototype = new Queue;
MyAwesomeQueue.prototype.constructor = MyAwesomeQueue;
function MyAwesomeQueue(){
Object.defineProperties(
this,
{
isStopped:{
enumerable:true,
get:checkStopped,
set:checkStopped
},
removeThirdItem:{
enumerable:true,
writable:false,
value:removeThird
}
}
);
Object.seal(this);
function checkStopped(){
return this.stop;
}
function removeThird(){
var list=this.contents;
list.splice(2,1);
this.contents=list;
return this.contents;
}
}