Skip to content

Commit 1da0daa

Browse files
committed
refactor(worker): use AbortSignal for timeout
1 parent 7830615 commit 1da0daa

2 files changed

Lines changed: 8 additions & 4 deletions

File tree

src/job.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export abstract class Job<Payload = any> {
3838
return dispatcher
3939
}
4040

41-
abstract execute(): Promise<void>
41+
abstract execute(signal?: AbortSignal): Promise<void>
4242

4343
failed?(error: Error): Promise<void>
4444
}

src/worker.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,15 @@ export class Worker {
257257
return instance.execute()
258258
}
259259

260-
const timeoutPromise = setTimeout(timeout).then(() => {
261-
throw new errors.E_JOB_TIMEOUT([instance.constructor.name, timeout])
260+
const signal = AbortSignal.timeout(timeout)
261+
262+
const abortPromise = new Promise<never>((_, reject) => {
263+
signal.addEventListener('abort', () => {
264+
reject(new errors.E_JOB_TIMEOUT([instance.constructor.name, timeout]))
265+
})
262266
})
263267

264-
await Promise.race([instance.execute(), timeoutPromise])
268+
await Promise.race([instance.execute(signal), abortPromise])
265269
}
266270

267271
async #acquireNextJob(queues: string[]): Promise<{ job: AcquiredJob; queue: string } | null> {

0 commit comments

Comments
 (0)