refactor(api): implement abort signal handling in API requests across multiple components to improve cancellation of ongoing requests and prevent memory leaks
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m12s

This commit is contained in:
2026-02-22 23:53:15 +07:00
parent 3fda43cf2c
commit a14f10d048
17 changed files with 278 additions and 128 deletions
+8 -3
View File
@@ -30,13 +30,16 @@ export default function InterfaceSpeedTest() {
});
useEffect(() => {
const controller = new AbortController();
const signal = controller.signal;
const load = async () => {
setLoading(true);
try {
const [serversRes, netRes, uiRes] = await Promise.all([
api.get('/servers'),
api.get('/network-config').catch(() => ({ data: null })),
api.get('/ui-settings').catch(() => ({ data: {} })),
api.get('/servers', { signal }),
api.get('/network-config', { signal }).catch(() => ({ data: null })),
api.get('/ui-settings', { signal }).catch(() => ({ data: {} })),
]);
setServers(Array.isArray(serversRes?.data) ? serversRes.data : []);
@@ -69,6 +72,7 @@ export default function InterfaceSpeedTest() {
cacheMinutes,
});
} catch (e) {
if (e?.name === 'CanceledError' || e?.name === 'AbortError' || e?.code === 'ERR_CANCELED') return;
console.error('[InterfaceSpeedTest] load failed', e);
notify.error('Не удалось загрузить данные для замера скорости');
} finally {
@@ -76,6 +80,7 @@ export default function InterfaceSpeedTest() {
}
};
load();
return () => controller.abort();
}, [notify]);
const gateways = useMemo(