aboutsummaryrefslogtreecommitdiff
path: root/src/services/promise_interval/promise_interval.js
diff options
context:
space:
mode:
authorShpuld Shpludson <shp@cock.li>2020-10-01 13:20:14 +0000
committerShpuld Shpludson <shp@cock.li>2020-10-01 13:20:14 +0000
commit6bd38c7d6f3b0bf7cd1bdb6f6dcb49492491c562 (patch)
tree9a4e136d71747188ae455954ab7b620a352f4b86 /src/services/promise_interval/promise_interval.js
parent68c2a5b18f887f3db2f5685953bc5175aaaabbd3 (diff)
parente331db79e50d4056cf61baa5ece88ad74e7e7fcf (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.js27
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 }
+}