useAsyncQueue.ts
660 Bytes
import { ref, watchEffect } from 'vue';
export function useAsyncQueue() {
const queue: Fn<any, Promise<any>>[] = [];
const executeFlag = ref(false);
const setTask = (fn: Fn<any, Promise<any>>) => {
queue.push(fn);
};
const removeTask = (fn: Fn<any, Promise<any>>) => {
const index = queue.findIndex((item) => item === fn);
~index && queue.splice(index, 1);
};
const clearTask = () => {
queue.length = 0;
};
watchEffect(() => {
if (executeFlag.value) {
queue.forEach((item) => item());
executeFlag.value = false;
clearTask();
}
});
return { setTask, removeTask, clearTask, executeFlag };
}