scryfall-client
Version:
A module for making requests to scryfall
58 lines (57 loc) • 1.61 kB
JavaScript
import Task from "./task";
var DEFAULT_SCRYFALL_DESIGNATED_WAIT_TIME = 100;
var taskCurrentlyInProgress = false;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var queue = [];
var delayTime = DEFAULT_SCRYFALL_DESIGNATED_WAIT_TIME;
export function clearQueue() {
queue = [];
taskCurrentlyInProgress = false;
}
function delayForScryfallDesignatedTime() {
return new Promise(function (resolve) {
setTimeout(resolve, delayTime);
});
}
export function setTaskDelayTime(time) {
delayTime = time;
}
export function resetTaskDelayTime() {
delayTime = DEFAULT_SCRYFALL_DESIGNATED_WAIT_TIME;
}
function checkForEnquedTasks(recursiveCheck) {
if (queue.length > 0) {
var nextTask_1 = queue.shift();
if (!nextTask_1) {
taskCurrentlyInProgress = false;
return;
}
delayForScryfallDesignatedTime().then(function () {
taskCurrentlyInProgress = true;
nextTask_1.start().then(function () {
checkForEnquedTasks();
});
});
}
else if (recursiveCheck) {
taskCurrentlyInProgress = false;
}
else {
delayForScryfallDesignatedTime().then(function () {
checkForEnquedTasks(true);
});
}
}
export default function enqueTask(task) {
var handler = new Task(task);
if (!taskCurrentlyInProgress) {
taskCurrentlyInProgress = true;
handler.start().then(function () {
checkForEnquedTasks();
});
}
else {
queue.push(handler);
}
return handler.getPromise();
}