azon_seeker/src/composables/useLongTask.ts

28 lines
610 B
TypeScript

export function useLongTask() {
const isRunning = ref(false);
const lastError = shallowRef<unknown>();
const startTask = async <T = undefined>(task: () => Promise<T>) => {
if (isRunning.value) {
throw Error('Task is still running.');
}
isRunning.value = true;
lastError.value = undefined;
let result = undefined;
try {
result = await task();
} catch (error) {
lastError.value = error;
console.error('Task failed:', error);
}
isRunning.value = false;
return result as T;
};
return {
isRunning,
lastError,
startTask,
};
}