aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/helpers/utils/fetch.js
blob: 1e7ef594ff030b2f271bd6393c4866d85281da43 (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
export default function ({ timeout = 120000 } = {}) {
  return function _fetch (url, opts) {
    return new Promise(async (resolve, reject) => {
      const abortController = new AbortController()
      const abortSignal = abortController.signal
      const f = fetch(url, {
        ...opts,
        signal: abortSignal,
      })

      const timer = setTimeout(() => abortController.abort(), timeout)

      try {
        const res = await f
        clearTimeout(timer)
        return resolve(res)
      } catch (e) {
        clearTimeout(timer)
        return reject(e)
      }
    })
  }
}