deno.land / x / jotai@v1.8.4 / src / utils / abortableAtom.ts

abortableAtom.ts
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import { atom, SECRET_INTERNAL_registerPromiseAbort as registerPromiseAbort,} from 'jotai'import type { Atom, WritableAtom } from 'jotai'
type Getter = Parameters<Atom<unknown>['read']>[0]type WriteGetter = Parameters<WritableAtom<unknown, unknown>['write']>[0]type Setter = Parameters<WritableAtom<unknown, unknown>['write']>[1]
type Read<Value> = (get: Getter, options: { signal: AbortSignal }) => Value
type Write<Update, Result extends void | Promise<void>> = ( get: WriteGetter, set: Setter, update: Update) => Result
// writable derived atomexport function abortableAtom< Value, Update, Result extends void | Promise<void> = void>( read: Read<Value>, write: Write<Update, Result>): WritableAtom<Value, Update, Result>
// read-only derived atomexport function abortableAtom<Value>(read: Read<Value>): Atom<Value>
export function abortableAtom< Value, Update, Result extends void | Promise<void>>(read: Read<Value>, write?: Write<Update, Result>) { return atom((get) => { const controller = new AbortController() const promise = read(get, { signal: controller.signal }) if (promise instanceof Promise) { registerPromiseAbort(promise, () => controller.abort()) } return promise }, write)}
jotai

Version Info

Tagged at
2 years ago