UNPKG

electron-rpc-async-queue

Version:

Async queue implementation for Electron RPC

34 lines (33 loc) 1.08 kB
"use strict"; 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;