@@ -572,14 +572,16 @@ export class WorkflowOrchestratorService {
572
572
}
573
573
574
574
const handlerIndex = ( handlers ) => {
575
- return handlers . indexOf ( ( s ) => s === subscriber || s . _id === subscriberId )
575
+ return handlers . findIndex (
576
+ ( s ) => s === subscriber || s . _id === subscriberId
577
+ )
576
578
}
577
579
578
580
if ( transactionId ) {
579
581
const transactionSubscribers = subscribers . get ( transactionId ) ?? [ ]
580
582
const subscriberIndex = handlerIndex ( transactionSubscribers )
581
583
if ( subscriberIndex !== - 1 ) {
582
- transactionSubscribers . slice ( subscriberIndex , 1 )
584
+ transactionSubscribers . splice ( subscriberIndex , 1 )
583
585
}
584
586
585
587
transactionSubscribers . push ( subscriber )
@@ -591,7 +593,7 @@ export class WorkflowOrchestratorService {
591
593
const workflowSubscribers = subscribers . get ( AnySubscriber ) ?? [ ]
592
594
const subscriberIndex = handlerIndex ( workflowSubscribers )
593
595
if ( subscriberIndex !== - 1 ) {
594
- workflowSubscribers . slice ( subscriberIndex , 1 )
596
+ workflowSubscribers . splice ( subscriberIndex , 1 )
595
597
}
596
598
597
599
workflowSubscribers . push ( subscriber )
@@ -604,7 +606,10 @@ export class WorkflowOrchestratorService {
604
606
transactionId,
605
607
subscriberOrId,
606
608
} : UnsubscribeOptions ) {
607
- const subscribers = this . subscribers . get ( workflowId ) ?? new Map ( )
609
+ const subscribers = this . subscribers . get ( workflowId )
610
+ if ( ! subscribers ) {
611
+ return
612
+ }
608
613
609
614
const filterSubscribers = ( handlers : SubscriberHandler [ ] ) => {
610
615
return handlers . filter ( ( handler ) => {
@@ -614,25 +619,36 @@ export class WorkflowOrchestratorService {
614
619
} )
615
620
}
616
621
617
- // Unsubscribe instance
618
- if ( ! this . subscribers . has ( workflowId ) ) {
619
- void this . redisSubscriber . unsubscribe ( this . getChannelName ( workflowId ) )
620
- }
621
-
622
622
if ( transactionId ) {
623
- const transactionSubscribers = subscribers . get ( transactionId ) ?? [ ]
624
- const newTransactionSubscribers = filterSubscribers (
625
- transactionSubscribers
626
- )
627
- subscribers . set ( transactionId , newTransactionSubscribers )
628
- this . subscribers . set ( workflowId , subscribers )
629
- return
623
+ const transactionSubscribers = subscribers . get ( transactionId )
624
+ if ( transactionSubscribers ) {
625
+ const newTransactionSubscribers = filterSubscribers (
626
+ transactionSubscribers
627
+ )
628
+
629
+ if ( newTransactionSubscribers . length ) {
630
+ subscribers . set ( transactionId , newTransactionSubscribers )
631
+ } else {
632
+ subscribers . delete ( transactionId )
633
+ }
634
+ }
635
+ } else {
636
+ const workflowSubscribers = subscribers . get ( AnySubscriber )
637
+ if ( workflowSubscribers ) {
638
+ const newWorkflowSubscribers = filterSubscribers ( workflowSubscribers )
639
+
640
+ if ( newWorkflowSubscribers . length ) {
641
+ subscribers . set ( AnySubscriber , newWorkflowSubscribers )
642
+ } else {
643
+ subscribers . delete ( AnySubscriber )
644
+ }
645
+ }
630
646
}
631
647
632
- const workflowSubscribers = subscribers . get ( AnySubscriber ) ?? [ ]
633
- const newWorkflowSubscribers = filterSubscribers ( workflowSubscribers )
634
- subscribers . set ( AnySubscriber , newWorkflowSubscribers )
635
- this . subscribers . set ( workflowId , subscribers )
648
+ if ( subscribers . size === 0 ) {
649
+ this . subscribers . delete ( workflowId )
650
+ void this . redisSubscriber . unsubscribe ( this . getChannelName ( workflowId ) )
651
+ }
636
652
}
637
653
638
654
private async notify (
0 commit comments