queue-name-process-storage.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { Job } from './job';
  2. export class QueueNameProcessStorage<T> {
  3. private items = new Map<string, Map<(job: Job) => Promise<any>, T>>();
  4. set(queueName: string, process: (job: Job) => Promise<any>, listener: T) {
  5. let items = this.items.get(queueName);
  6. if (!items) {
  7. items = new Map();
  8. this.items.set(queueName, items);
  9. }
  10. items.set(process, listener);
  11. }
  12. has(queueName: string, process: (job: Job) => Promise<any>): boolean {
  13. const items = this.items.get(queueName);
  14. if (!items) {
  15. return false;
  16. }
  17. return items.has(process);
  18. }
  19. getAndDelete(queueName: string, process: (job: Job) => Promise<any>): T | undefined {
  20. const items = this.items.get(queueName);
  21. if (!items) {
  22. return;
  23. }
  24. const item = items.get(process);
  25. if (!item) {
  26. return;
  27. }
  28. items.delete(process);
  29. if (items.size === 0) {
  30. this.items.delete(queueName);
  31. }
  32. return item;
  33. }
  34. }