fix(e2b): simplify setup abort wait
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user