Skip to content

Commit 60c7a00

Browse files
committed
Refactor abortable package structure
- Extract abortable implementation to separate module - Update index to re-export from dedicated modules - Rename test file for consistency with source module name Signed-off-by: Vladislav Polyakov <polRk@ydb.tech>
1 parent e01a6ca commit 60c7a00

File tree

3 files changed

+17
-15
lines changed

3 files changed

+17
-15
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export async function abortable<T>(signal: AbortSignal, promise: Promise<T>): Promise<T> {
2+
signal.throwIfAborted()
3+
4+
let abortHandler: () => void
5+
let abortPromise = new Promise<T>((_, reject) => {
6+
abortHandler = () => reject(signal.reason)
7+
signal.addEventListener('abort', abortHandler, { once: true })
8+
})
9+
10+
try {
11+
return await Promise.race<T>([promise, abortPromise])
12+
} finally {
13+
if (abortHandler!) signal.removeEventListener('abort', abortHandler)
14+
}
15+
}

packages/abortable/src/index.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,2 @@
1-
export async function abortable<T>(signal: AbortSignal, promise: Promise<T>): Promise<T> {
2-
signal.throwIfAborted()
3-
4-
let abortHandler: () => void
5-
let abortPromise = new Promise<T>((_, reject) => {
6-
abortHandler = () => reject(signal.reason)
7-
signal.addEventListener('abort', abortHandler, { once: true })
8-
})
9-
10-
try {
11-
return await Promise.race<T>([promise, abortPromise])
12-
} finally {
13-
if (abortHandler!) signal.removeEventListener('abort', abortHandler)
14-
}
15-
}
1+
export * from './abortable.js'
2+
export * from './signals.js'

0 commit comments

Comments
 (0)