123456789101112131415161718192021222324252627282930313233343536373839 |
- import { watch } from "vue";
- export const watchPolling = <T>(
- getStart: () => { start: boolean; payload: T },
- task: (payload: T) => void
- ) => {
- let timeout: number;
- let stop = false;
- const cleanup = () => {
- clearTimeout(timeout);
- stop = true;
- };
- const stopWatch = watch(
- getStart,
- ({ start, payload }, _, onCleanup) => {
- if (!start) {
- return;
- }
- stop = false;
- const pollingTask = async () => {
- await task(payload);
- if (!stop) {
- timeout = setTimeout(pollingTask, 3000);
- }
- };
- pollingTask();
- onCleanup(cleanup);
- },
- { immediate: true }
- );
- return () => {
- cleanup();
- stopWatch();
- };
- };
|