forked from ninaTorgunakova/slowreader
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbusy.ts
More file actions
35 lines (29 loc) · 738 Bytes
/
busy.ts
File metadata and controls
35 lines (29 loc) · 738 Bytes
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
import { atom, computed } from 'nanostores'
import { onEnvironment } from './environment.js'
import { hasFeeds } from './feed.js'
const $tasks = atom(0)
async function loadFeeds(): Promise<void> {
if (hasFeeds.get() !== undefined) return
return new Promise(resolve => {
let unbind = hasFeeds.listen(() => {
if (hasFeeds.get() !== undefined) {
unbind()
resolve()
}
})
})
}
onEnvironment(() => {
busyDuring(async () => {
await loadFeeds()
})
})
export async function busyDuring(cb: () => Promise<void>): Promise<void> {
$tasks.set($tasks.get() + 1)
try {
await cb()
} finally {
$tasks.set($tasks.get() - 1)
}
}
export const busy = computed($tasks, tasks => tasks > 0)