aboutsummaryrefslogtreecommitdiff
path: root/src/services/fetcher/fetcher.js
blob: aae1c2cc19bfecb74cd1fe2a66e05f21d544cec3 (plain)
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

// makeFetcher - replacement for setInterval for fetching, starts counting
// the interval only after a request is done instead of immediately.
// - promiseCall is a function that returns a promise, it's called the first
// time after the first interval.
// - interval is the interval delay in ms.

export const makeFetcher = (promiseCall, interval) => {
  let stopped = false
  let timeout = null
  let func = () => {}

  func = () => {
    promiseCall().finally(() => {
      if (stopped) return
      timeout = window.setTimeout(func, interval)
    })
  }

  const stopFetcher = () => {
    stopped = true
    window.clearTimeout(timeout)
  }

  timeout = window.setTimeout(func, interval)

  return stopFetcher
}