@@ -478,16 +478,17 @@ export class YSocketIO {
478
478
async debouncedPersist ( namespace , doc ) {
479
479
this . debouncedPersistDocMap . set ( namespace , doc )
480
480
if ( this . debouncedPersistMap . has ( namespace ) ) return
481
- this . debouncedPersistMap . set (
482
- namespace ,
483
- setTimeout (
484
- async ( ) => {
481
+ const timeout = setTimeout (
482
+ async ( ) => {
483
+ try {
485
484
assert ( this . client )
486
485
const doc = this . debouncedPersistDocMap . get ( namespace )
486
+ logSocketIO ( `trying to persist ${ namespace } ` )
487
487
if ( ! doc ) return
488
+ /** @type {Promise<void> | null } */
489
+ let workerPromise = null
488
490
if ( this . client . persistWorker ) {
489
- /** @type {Promise<void> } */
490
- const promise = new Promise ( ( resolve ) => {
491
+ workerPromise = new Promise ( ( resolve ) => {
491
492
assert ( this . client ?. persistWorker )
492
493
this . awaitingPersistMap . set ( namespace , resolve )
493
494
@@ -499,17 +500,24 @@ export class YSocketIO {
499
500
docstate : buf
500
501
} )
501
502
} )
502
- await promise
503
+ if ( workerPromise ) {
504
+ await workerPromise
505
+ }
503
506
} else {
504
507
await this . client . store . persistDoc ( namespace , 'index' , doc )
505
508
}
506
509
await this . client . trimRoomStream ( namespace , 'index' , true )
510
+ } catch ( e ) {
511
+ console . error ( e )
512
+ } finally {
507
513
this . debouncedPersistDocMap . delete ( namespace )
508
514
this . debouncedPersistMap . delete ( namespace )
509
- } ,
510
- PERSIST_INTERVAL + ( Math . random ( ) - 0.5 ) * PERSIST_INTERVAL
511
- )
515
+ }
516
+ } ,
517
+ PERSIST_INTERVAL + ( Math . random ( ) - 0.5 ) * PERSIST_INTERVAL
512
518
)
519
+
520
+ this . debouncedPersistMap . set ( namespace , timeout )
513
521
}
514
522
515
523
/**
0 commit comments