Files
hoppscotch/packages/hoppscotch-common/src/composables/poll.ts
2022-12-02 03:05:35 -05:00

32 lines
634 B
TypeScript

import { onBeforeUnmount, Ref, shallowRef } from "vue"
export function usePolled<T>(
pollDurationMS: number,
pollFunc: (stopPolling: () => void) => T
): Ref<T> {
let polling = true
let handle: ReturnType<typeof setInterval> | undefined
const stopPolling = () => {
if (handle) {
clearInterval(handle)
handle = undefined
polling = false
}
}
const result = shallowRef(pollFunc(stopPolling))
if (polling) {
handle = setInterval(() => {
result.value = pollFunc(stopPolling)
}, pollDurationMS)
}
onBeforeUnmount(() => {
if (polling) stopPolling()
})
return result
}