Created
August 22, 2016 22:52
-
-
Save CertainLach/928c7879fa574a9eb43d3bc0011a782b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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