diff --git a/packages/core/src/ScheduledTaskManager.ts b/packages/core/src/ScheduledTaskManager.ts index fd2bb525a9..00396903a5 100644 --- a/packages/core/src/ScheduledTaskManager.ts +++ b/packages/core/src/ScheduledTaskManager.ts @@ -30,8 +30,9 @@ export class ScheduledTaskManager { deregisterCrons(workflowId: string) { const cronJobs = this.cronJobs.get(workflowId) ?? []; - for (const cronJob of cronJobs) { - cronJob.stop(); + while (cronJobs.length) { + const cronJob = cronJobs.pop(); + if (cronJob) cronJob.stop(); } } diff --git a/packages/core/test/ScheduledTaskManager.test.ts b/packages/core/test/ScheduledTaskManager.test.ts index 3ff8837ca9..5166240856 100644 --- a/packages/core/test/ScheduledTaskManager.test.ts +++ b/packages/core/test/ScheduledTaskManager.test.ts @@ -56,8 +56,13 @@ describe('ScheduledTaskManager', () => { scheduledTaskManager.registerCron(workflow, everyMinute, onTick); scheduledTaskManager.registerCron(workflow, everyMinute, onTick); scheduledTaskManager.registerCron(workflow, everyMinute, onTick); + + expect(scheduledTaskManager.cronJobs.get(workflow.id)?.length).toBe(3); + scheduledTaskManager.deregisterCrons(workflow.id); + expect(scheduledTaskManager.cronJobs.get(workflow.id)?.length).toBe(0); + expect(onTick).not.toHaveBeenCalled(); jest.advanceTimersByTime(10 * 60 * 1000); // 10 minutes expect(onTick).not.toHaveBeenCalled();