aboutsummaryrefslogtreecommitdiff
path: root/src/services/promise_interval/promise_interval.js
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2020-10-17 19:24:07 +0300
committerHenry Jameson <me@hjkos.com>2020-10-17 19:24:07 +0300
commit29ff0be92cfd87ba95d1f78323794dfb1223b514 (patch)
tree79836b7fb5b3e325274a833c34fd4c5f6155ba2d /src/services/promise_interval/promise_interval.js
parenta463959a365a5d618a79c96a26f6506e700d6ea3 (diff)
parent3ca729d09880813420a263221cdc68bcca13a1fb (diff)
Merge remote-tracking branch 'origin/develop' into settings-changed
* origin/develop: (48 commits) fix/leftover-emoji-checkboxes-in-settings Apply 1 suggestion(s) to 1 file(s) Translated using Weblate (Spanish) Translated using Weblate (Persian) Translated using Weblate (Persian) Translated using Weblate (Polish) update changelog Stop click propagation when unhiding nsfw Fix Follow Requests title style Translated using Weblate (Persian) Translated using Weblate (Persian) Translated using Weblate (French) Added translation using Weblate (Persian) Translated using Weblate (Chinese (Traditional)) Translated using Weblate (Chinese (Simplified)) Translated using Weblate (Italian) Translated using Weblate (English) Translated using Weblate (English) Translated using Weblate (Basque) Translated using Weblate (Spanish) ...
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 }
+}