diff options
| author | Shpuld Shpludson <shp@cock.li> | 2020-10-01 13:20:14 +0000 |
|---|---|---|
| committer | Shpuld Shpludson <shp@cock.li> | 2020-10-01 13:20:14 +0000 |
| commit | 6bd38c7d6f3b0bf7cd1bdb6f6dcb49492491c562 (patch) | |
| tree | 9a4e136d71747188ae455954ab7b620a352f4b86 /src/services/promise_interval/promise_interval.js | |
| parent | 68c2a5b18f887f3db2f5685953bc5175aaaabbd3 (diff) | |
| parent | e331db79e50d4056cf61baa5ece88ad74e7e7fcf (diff) | |
Merge branch 'fix/wait-for-request-before-starting-interval' into 'develop'
Fix/wait for request before starting interval - fix #937
Closes #937
See merge request pleroma/pleroma-fe!1222
Diffstat (limited to 'src/services/promise_interval/promise_interval.js')
| -rw-r--r-- | src/services/promise_interval/promise_interval.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/services/promise_interval/promise_interval.js b/src/services/promise_interval/promise_interval.js new file mode 100644 index 00000000..cf17970d --- /dev/null +++ b/src/services/promise_interval/promise_interval.js @@ -0,0 +1,27 @@ + +// promiseInterval - replacement for setInterval for promises, starts counting +// the interval only after a promise 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 promiseInterval = (promiseCall, interval) => { + let stopped = false + let timeout = null + + const func = () => { + promiseCall().finally(() => { + if (stopped) return + timeout = window.setTimeout(func, interval) + }) + } + + const stopFetcher = () => { + stopped = true + window.clearTimeout(timeout) + } + + timeout = window.setTimeout(func, interval) + + return { stop: stopFetcher } +} |
