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 */
private awaitPreparation(signal: AbortSignal | undefined): Promise<PreparedRuntime | undefined> {
if (signal === undefined) return this.ready
return new Promise<PreparedRuntime | undefined>((resolve, reject) => {
const onAbort = (): void => { cleanup(); resolve(undefined) }
const cleanup = (): void => { signal.removeEventListener('abort', onAbort) }
signal.addEventListener('abort', onAbort, { once: true })
if (signal.aborted) {
onAbort()
return
}
void this.ready.then(
(runtime) => { cleanup(); resolve(runtime) },
(error: unknown) => {
cleanup()
reject(new Error(messageOf(error), { cause: error }))
},
)
})
private async awaitPreparation(signal: AbortSignal | undefined): Promise<PreparedRuntime | undefined> {
if (signal === undefined) return await this.ready
const aborted = Promise.withResolvers<undefined>()
const onAbort = (): void => { aborted.resolve(undefined) }
signal.addEventListener('abort', onAbort, { once: true })
if (signal.aborted) {
signal.removeEventListener('abort', onAbort)
return undefined
}
try {
return await Promise.race([this.ready, aborted.promise])
} finally {
signal.removeEventListener('abort', onAbort)
}
}
private assertPreparationActive(): void {