File tree Expand file tree Collapse file tree 1 file changed +27
-3
lines changed
packages/programs/data/shared-log/src Expand file tree Collapse file tree 1 file changed +27
-3
lines changed Original file line number Diff line number Diff line change @@ -4382,6 +4382,7 @@ export class SharedLog<
43824382 const timeout = options . timeout ?? this . waitForReplicatorTimeout ;
43834383
43844384 return new Promise ( ( resolve , reject ) => {
4385+ let settled = false ;
43854386 const removeListeners = ( ) => {
43864387 this . events . removeEventListener ( "replication:change" , roleListener ) ;
43874388 this . events . removeEventListener ( "replicator:mature" , roleListener ) ; // TODO replication:change event ?
@@ -4391,12 +4392,20 @@ export class SharedLog<
43914392 ) ;
43924393 } ;
43934394 const abortListener = ( ) => {
4395+ if ( settled ) {
4396+ return ;
4397+ }
4398+ settled = true ;
43944399 removeListeners ( ) ;
43954400 clearTimeout ( timer ) ;
43964401 resolve ( false ) ;
43974402 } ;
43984403
4399- const timer = setTimeout ( async ( ) => {
4404+ const timer = setTimeout ( ( ) => {
4405+ if ( settled ) {
4406+ return ;
4407+ }
4408+ settled = true ;
44004409 removeListeners ( ) ;
44014410 resolve ( false ) ;
44024411 } , timeout ) ;
@@ -4422,19 +4431,34 @@ export class SharedLog<
44224431 }
44234432 options ?. onLeader && leaderKeys . forEach ( options . onLeader ) ;
44244433
4434+ if ( settled ) {
4435+ return ;
4436+ }
4437+ settled = true ;
44254438 removeListeners ( ) ;
44264439 clearTimeout ( timer ) ;
44274440 resolve ( leaders ) ;
44284441 } ;
4442+ const triggerCheck = ( ) => {
4443+ void check ( ) . catch ( ( error ) => {
4444+ if ( settled ) {
4445+ return ;
4446+ }
4447+ settled = true ;
4448+ removeListeners ( ) ;
4449+ clearTimeout ( timer ) ;
4450+ reject ( error instanceof Error ? error : new Error ( String ( error ) ) ) ;
4451+ } ) ;
4452+ } ;
44294453
44304454 const roleListener = ( ) => {
4431- check ( ) ;
4455+ triggerCheck ( ) ;
44324456 } ;
44334457
44344458 this . events . addEventListener ( "replication:change" , roleListener ) ; // TODO replication:change event ?
44354459 this . events . addEventListener ( "replicator:mature" , roleListener ) ; // TODO replication:change event ?
44364460 this . _closeController . signal . addEventListener ( "abort" , abortListener ) ;
4437- check ( ) ;
4461+ triggerCheck ( ) ;
44384462 } ) ;
44394463 }
44404464
You can’t perform that action at this time.
0 commit comments