fix(e2b): simplify setup abort wait

This commit is contained in:
Tianyi Cui
2026-07-28 16:54:29 +08:00
parent bccad1bb31
commit dc44f93c39

View File

@@ -199,24 +199,20 @@ export class E2BCodeRuntime extends CodeRuntime {
} }
/* jscpd:ignore-end */ /* jscpd:ignore-end */
private awaitPreparation(signal: AbortSignal | undefined): Promise<PreparedRuntime | undefined> { private async awaitPreparation(signal: AbortSignal | undefined): Promise<PreparedRuntime | undefined> {
if (signal === undefined) return this.ready if (signal === undefined) return await this.ready
return new Promise<PreparedRuntime | undefined>((resolve, reject) => { const aborted = Promise.withResolvers<undefined>()
const onAbort = (): void => { cleanup(); resolve(undefined) } const onAbort = (): void => { aborted.resolve(undefined) }
const cleanup = (): void => { signal.removeEventListener('abort', onAbort) } signal.addEventListener('abort', onAbort, { once: true })
signal.addEventListener('abort', onAbort, { once: true }) if (signal.aborted) {
if (signal.aborted) { signal.removeEventListener('abort', onAbort)
onAbort() return undefined
return }
} try {
void this.ready.then( return await Promise.race([this.ready, aborted.promise])
(runtime) => { cleanup(); resolve(runtime) }, } finally {
(error: unknown) => { signal.removeEventListener('abort', onAbort)
cleanup() }
reject(new Error(messageOf(error), { cause: error }))
},
)
})
} }
private assertPreparationActive(): void { private assertPreparationActive(): void {