UNPKG

rbxjs-plus

Version:

A system allowing access to roblox functions.

63 lines (61 loc) 1.47 kB
// Includes var promise = require('./promise.js'); var options = require('../options.js'); // Define module.exports = function (type, index, func, handler) { var group = options.queue[type]; if (!group[index]) { group[index] = { jobs: [] }; } var home = group[index]; function run (time) { return function (resolve, reject) { setTimeout(function () { func().then(resolve).catch(reject); }, time); }; } function deactivate (err) { jobs.shift(); if (!handler(err)) { home.last = Date.now(); } } function next () { jobs.shift(); home.last = Date.now(); } if (group.delay > 0) { var jobs = home.jobs; var delay = group.delay; var last = home.last; if (jobs.length === 0) { var item; var diff = Date.now() - last; if (!last || diff > delay) { item = func(); } else { item = promise(run(delay - diff)); } jobs.push(item); item.then(next).catch(deactivate); return item; } else { var job = jobs[jobs.length - 1].then(function () { var item = promise(run(delay)); item.then(next).catch(deactivate); return item; }).catch(function (err) { var item = handler && handler(err) ? func() : promise(run(delay)); item.then(next).catch(deactivate); return item; }); jobs.push(job); return job; } } else { return func(); } };