@@ -93,14 +93,17 @@ export function kvdex<const T extends SchemaDefinition>(
93
93
94
94
// Add queue listener
95
95
kv . listenQueue ( async ( msg ) => {
96
+ // Parse queue message
96
97
const parsed = parseQueueMessage ( msg )
97
98
if ( ! parsed . ok ) {
98
99
return
99
100
}
100
101
102
+ // Find correct queue handlers
101
103
const { __data__, __handlerId__ } = parsed . msg
102
104
const handlers = queueHandlers . get ( __handlerId__ )
103
105
106
+ // Run queue handlers
104
107
await allFulfilled ( handlers ?. map ( ( handler ) => handler ( __data__ ) ) ?? [ ] )
105
108
} )
106
109
}
@@ -343,6 +346,7 @@ export class KvDex<const T extends Schema<SchemaDefinition>> {
343
346
*
344
347
* @param job - Work that will be run for each job interval.
345
348
* @param options - Cron options.
349
+ * @returns Cron job ID.
346
350
*/
347
351
async cron (
348
352
job : ( msg : CronMessage ) => unknown ,
@@ -379,16 +383,33 @@ export class KvDex<const T extends Schema<SchemaDefinition>> {
379
383
// Add cron job listener
380
384
this . listenQueue < CronMessage > ( async ( msg ) => {
381
385
// Check if exit criteria is met, end repeating cron job if true
382
- const exit = await options ?. exitOn ?.( msg ) ?? false
386
+ let exit = false
387
+ try {
388
+ exit = await options ?. exitOn ?.( msg ) ?? false
389
+ } catch ( e ) {
390
+ console . error (
391
+ `An error was caught while running exitOn callback for cron job {ID = ${ id } }` ,
392
+ e ,
393
+ )
394
+ }
395
+
383
396
if ( exit ) {
384
397
await options ?. onExit ?.( msg )
385
398
return
386
399
}
387
400
388
401
// Set the next interval
389
- const interval = options ?. setInterval
390
- ? await options ?. setInterval ! ( msg )
391
- : options ?. interval ?? DEFAULT_CRON_INTERVAL
402
+ let interval = DEFAULT_CRON_INTERVAL
403
+ try {
404
+ interval = options ?. setInterval
405
+ ? await options ?. setInterval ! ( msg )
406
+ : options ?. interval ?? DEFAULT_CRON_INTERVAL
407
+ } catch ( e ) {
408
+ console . error (
409
+ `An error was caught while running setInterval callback for cron job {ID = ${ id } }` ,
410
+ e ,
411
+ )
412
+ }
392
413
393
414
await allFulfilled ( [
394
415
// Enqueue next job
@@ -411,6 +432,9 @@ export class KvDex<const T extends Schema<SchemaDefinition>> {
411
432
isFirstJob : true ,
412
433
enqueueTimestamp : new Date ( ) ,
413
434
} , options ?. startDelay )
435
+
436
+ // Return the cron job id
437
+ return id
414
438
}
415
439
}
416
440
0 commit comments