electron-rpc-async-queue
Version:
Async queue implementation for Electron RPC
34 lines (33 loc) • 1.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Task_1 = require("./Task");
const TaskEventType_1 = require("./TaskEventType");
/** Queue structure */
class AsyncQueue {
constructor() {
/** Tasks queue array */
this.queue = [];
}
/** Add element to queue */
async push(body, ...args) {
const task = new Task_1.Task(body, ...args);
const promise = new Promise(resolve => task.on(TaskEventType_1.TaskEventType.END, (error, result) => {
this.queue.shift();
resolve({ error, result, args });
}));
this.queue.push(task);
if (this.queue.length > 1) {
const TASK_INDEX = this.queue.length - 1;
const PREV_TASK_INDEX = TASK_INDEX - 1;
const prevTask = this.queue[PREV_TASK_INDEX];
prevTask.on(TaskEventType_1.TaskEventType.END, () => {
task.run();
});
}
else {
task.run();
}
return await promise;
}
}
exports.AsyncQueue = AsyncQueue;