Skip to content

Instantly share code, notes, and snippets.

@CertainLach
Created August 22, 2016 22:52
Show Gist options
  • Save CertainLach/928c7879fa574a9eb43d3bc0011a782b to your computer and use it in GitHub Desktop.
Save CertainLach/928c7879fa574a9eb43d3bc0011a782b to your computer and use it in GitHub Desktop.
import Logger from "./logger/Logger";
import Promise from "bluebird";
/**
* Created by Creeplays on 23.08.2016.
*/
let logger=new Logger('Queuer');
console.log('Queuer import');
export function queue(time){
return function (target, key, descriptor) {
let queued=[];
let origFun=descriptor.value;
let stopped=true;
async function process() {
try {
if (queued.length == 0) {
stopped = true;
return;
}
stopped = false;
let startTime = new Date().getTime();
let q = queued.shift();
try {
let result = await origFun(...q.args);
q.resolve(result);
} catch (e) {
q.reject(e);
}
if (new Date().getTime() - startTime >= time) {
setTimeout(()=>process(), 1);
} else {
setTimeout(()=>process(), time - (new Date().getTime() - startTime));
}
}catch (e){
logger.error('Error on processing tasks for '+key,e);
}
}
descriptor.value = function() {
logger.log('Called');
return new Promise((resolve,reject)=>{
queued.push({
reject:reject,
resolve:resolve,
args:arguments
});
if(stopped)
process();
});
};
return descriptor;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment