diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-08-29 17:00:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-29 17:00:12 +0100 |
commit | ea5ab993993280b7c9fc03c25be658f11369df4d (patch) | |
tree | 9fe6743bbcb3b560764fe7f07f839744c7aec9dc /src/lib/async/cancelable.ts | |
parent | 551c4a4f3210e5fa3060d06f4beeaeef3a97093d (diff) | |
download | voidsky-ea5ab993993280b7c9fc03c25be658f11369df4d.tar.zst |
[Video] Make compress/upload cancelable (#4996)
* add abort controller to video upload system * rm log * rm log 2
Diffstat (limited to 'src/lib/async/cancelable.ts')
-rw-r--r-- | src/lib/async/cancelable.ts | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/lib/async/cancelable.ts b/src/lib/async/cancelable.ts new file mode 100644 index 000000000..50fbcc63b --- /dev/null +++ b/src/lib/async/cancelable.ts @@ -0,0 +1,20 @@ +export function cancelable<A, T>( + f: (args: A) => Promise<T>, + signal: AbortSignal, +) { + return (args: A) => { + return new Promise<T>((resolve, reject) => { + signal.addEventListener('abort', () => { + reject(new AbortError()) + }) + f(args).then(resolve, reject) + }) + } +} + +export class AbortError extends Error { + constructor() { + super('Aborted') + this.name = 'AbortError' + } +} |