Spaces:
Paused
Paused
| /** | |
| * Poll async Celery task endpoints until done or timeout. | |
| */ | |
| import apiClient from '@/api/client.js' | |
| export function pollTaskResult(getUrl, { intervalMs = 3000, timeoutMs = 180000 } = {}) { | |
| return new Promise((resolve, reject) => { | |
| const interval = setInterval(async () => { | |
| try { | |
| const { data: result } = await apiClient.get(getUrl) | |
| if (result.status === 'done') { | |
| clearInterval(interval) | |
| clearTimeout(timeout) | |
| resolve(result.result) | |
| } else if (result.status === 'error') { | |
| clearInterval(interval) | |
| clearTimeout(timeout) | |
| reject(new Error(result.detail || 'Task failed')) | |
| } | |
| } catch (e) { | |
| clearInterval(interval) | |
| clearTimeout(timeout) | |
| reject(e) | |
| } | |
| }, intervalMs) | |
| const timeout = setTimeout(() => { | |
| clearInterval(interval) | |
| reject(new Error('Timeout — tác vụ mất quá nhiều thời gian')) | |
| }, timeoutMs) | |
| }) | |
| } | |