UNPKG

@robotical/appv2-warranty-service-lib

Version:

A tool that gathers data from the Apps and sends it to the Analytics server

60 lines (59 loc) 1.9 kB
export default class TicketQueue { constructor() { this.queue = []; this.isProcessing = false; this.resultsQueue = []; this.pendingResolvers = new Map(); } addTicket(ticket) { this.queue.push(ticket); return new Promise((resolve) => { this.pendingResolvers.set(ticket.ticketId, resolve); }); } getQueue() { return [...this.queue]; } removeTicket(ticket) { this.queue = this.queue.filter((t) => t !== ticket); } async processTicketsQueue(cb) { if (this.isProcessing) return; this.isProcessing = true; try { while (this.queue.length > 0) { const ticket = this.queue.shift(); let resultId = false; try { resultId = await cb(ticket); } catch (error) { console.error(`Error processing ticket: ${error}`); } this.resultsQueue.push({ ticketId: ticket.ticketId, result: resultId }); const resolver = this.pendingResolvers.get(ticket.ticketId); if (resolver) { resolver(resultId); this.pendingResolvers.delete(ticket.ticketId); } await new Promise(resolve => setTimeout(resolve, 5000)); } } catch (error) { console.error(`Error processing tickets queue: ${error}`); } finally { this.isProcessing = false; if (this.queue.length > 0) { this.processTicketsQueue(cb); } } } getResultByTicketId(ticketId) { const result = this.resultsQueue.find((r) => r.ticketId === ticketId); if (!result) return -1; return result.result; } }