azon_seeker/src/composables/useLongTask.ts
Ktight 90110a48f0
Feat/advertisement (#26)
* feat: add Amazon collection metadata and reliable sync

* fix: route extension sync through configured server

* chore: release extension v0.7.13

* fix: handle extension ports across BFCache navigation

* fix: classify bottom Sponsored Brands video placements

* fix: exclude hidden Amazon ad cards

* fix: derive Amazon result page from URL

* fix: ignore hidden Amazon sponsored products

* fix: preserve base Amazon product collection

* fix: bind Amazon results to visible page

* fix: classify visible Amazon ad formats

* fix: wait for lazy Amazon ad modules

* perf: reduce Amazon lazy-load scroll stops

* fix: classify Amazon sponsored brand and video search ads

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: collect Shop by type thematic SP ads via redirect chains without data-asin

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: classify sponsored ads across new Amazon templates

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: PetrichorFun <127877748+PetrichorFun@users.noreply.github.com>
2026-09-10 18:03:11 +08:00

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,
};
}