Spaces:
Paused
Paused
File size: 986 Bytes
1c2ed83 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | /**
* 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)
})
}
|