@ampush/centaurus
Version:
Centaurus, is an Ampush repository designed to house common UI components, JS classes, templates and API methods in a central place that can be imported and reused across other Ampush partner repositories as needed.
50 lines (48 loc) • 1.13 kB
JavaScript
const Queue = () => {
const queue = [];
let workingOnPromise = false;
const enqueue = (promise) => {
return new Promise((resolve, reject) => {
queue.push({
promise,
resolve,
reject,
});
});
};
const dequeue = () => {
if (workingOnPromise) {
return false;
}
const item = queue.shift();
if (!item) {
return false;
}
try {
workingOnPromise = true;
item
.promise()
.then((value) => {
workingOnPromise = false;
item.resolve(value);
dequeue();
})
.catch((err) => {
workingOnPromise = false;
item.reject(err);
dequeue();
});
}
catch (err) {
workingOnPromise = false;
item.reject(err);
dequeue();
}
return true;
};
return {
enqueue,
dequeue,
};
};
export default Queue;