import { IAsyncQueue } from "@spt-aki/models/spt/utils/IAsyncQueue"; import { ICommand } from "@spt-aki/models/spt/utils/ICommand"; export class AsyncQueue implements IAsyncQueue { protected commandsQueue: ICommand[]; constructor() { this.commandsQueue = []; } // Wait for the right command to execute // This ensures that the commands execute in the right order, thus no data corruption public async waitFor(command: ICommand): Promise { // Add to the queue this.commandsQueue.push(command); // eslint-disable-next-line no-constant-condition while (this.commandsQueue[0].uuid !== command.uuid) { await new Promise(resolve => { setTimeout(resolve, 100); }); } // When the command is ready, execute it return this.commandsQueue.shift().cmd(); } }