about summary refs log tree commit diff
path: root/src/lib/async/until.ts
blob: db53c92189ab7b6ce94cbb2aaac2b8e87351b4ca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import {timeout} from './timeout'

export async function until(
  retries: number,
  delay: number,
  cond: (v: any, err: any) => boolean,
  fn: () => Promise<any>,
): Promise<boolean> {
  while (retries > 0) {
    try {
      const v = await fn()
      if (cond(v, undefined)) {
        return true
      }
    } catch (e: any) {
      if (cond(undefined, e)) {
        return true
      }
    }
    await timeout(delay)
    retries--
  }
  return false
}