From 3fb35e8123d3a8cd151571b315b7ec4d7e0875c7 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Fri, 4 Sep 2020 11:19:53 +0300 Subject: rename to promiseInterval --- src/services/promise_interval/promise_interval.js | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/services/promise_interval/promise_interval.js (limited to 'src/services/promise_interval/promise_interval.js') diff --git a/src/services/promise_interval/promise_interval.js b/src/services/promise_interval/promise_interval.js new file mode 100644 index 00000000..ee46a236 --- /dev/null +++ b/src/services/promise_interval/promise_interval.js @@ -0,0 +1,28 @@ + +// 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 + 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 { stop: stopFetcher } +} -- cgit v1.2.3-70-g09d2 From c89ac79140e059f89d4da88ce49c9bb24db4cc20 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Fri, 4 Sep 2020 11:22:14 +0300 Subject: fix chat fetcher stops, change fetcher code --- src/modules/chats.js | 4 ++-- src/services/promise_interval/promise_interval.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'src/services/promise_interval/promise_interval.js') diff --git a/src/modules/chats.js b/src/modules/chats.js index 60273a44..8e2fabb6 100644 --- a/src/modules/chats.js +++ b/src/modules/chats.js @@ -112,14 +112,14 @@ const chats = { setChatListFetcher (state, { commit, fetcher }) { const prevFetcher = state.chatListFetcher if (prevFetcher) { - prevFetcher() + prevFetcher.stop() } state.chatListFetcher = fetcher && fetcher() }, setCurrentChatFetcher (state, { fetcher }) { const prevFetcher = state.fetcher if (prevFetcher) { - prevFetcher() + prevFetcher.stop() } state.fetcher = fetcher && fetcher() }, diff --git a/src/services/promise_interval/promise_interval.js b/src/services/promise_interval/promise_interval.js index ee46a236..cf17970d 100644 --- a/src/services/promise_interval/promise_interval.js +++ b/src/services/promise_interval/promise_interval.js @@ -8,9 +8,8 @@ export const promiseInterval = (promiseCall, interval) => { let stopped = false let timeout = null - let func = () => {} - func = () => { + const func = () => { promiseCall().finally(() => { if (stopped) return timeout = window.setTimeout(func, interval) -- cgit v1.2.3-70-g09d2