네트워크 알림 오류 수정 및 리팩토링
This commit is contained in:
@@ -62,19 +62,37 @@ export const checkNetworkStatus = async (): Promise<boolean> => {
|
||||
'https://www.apple.com'
|
||||
];
|
||||
|
||||
// 첫 번째 성공 응답 시 온라인으로 판단
|
||||
const isOnline = await Promise.any(
|
||||
endpoints.map(url =>
|
||||
try {
|
||||
// 각 엔드포인트에 대해 fetch 요청 시도
|
||||
const fetchPromises = endpoints.map(url =>
|
||||
fetch(url, { method: 'HEAD', signal: controller.signal })
|
||||
.then(res => res.ok)
|
||||
)
|
||||
);
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
setNetworkStatus(isOnline ? 'online' : 'offline');
|
||||
return isOnline;
|
||||
.then(res => {
|
||||
if (res.ok) return true;
|
||||
throw new Error(`Failed to fetch ${url}`);
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(`[네트워크] ${url} 연결 실패:`, err.message);
|
||||
return false; // 실패 시 false 반환
|
||||
})
|
||||
);
|
||||
|
||||
// 모든 요청을 병렬로 실행하고 결과 확인
|
||||
const results = await Promise.all(fetchPromises);
|
||||
|
||||
// 하나라도 성공했으면 온라인으로 판단
|
||||
const isOnline = results.some(result => result === true);
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
setNetworkStatus(isOnline ? 'online' : 'offline');
|
||||
return isOnline;
|
||||
} catch (error) {
|
||||
clearTimeout(timeoutId);
|
||||
console.error('[네트워크] 네트워크 확인 실패:', error);
|
||||
setNetworkStatus('offline');
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('[네트워크] 연결 확인 실패:', error);
|
||||
console.error('[네트워크] 연결 확인 중 예상치 못한 오류:', error);
|
||||
setNetworkStatus('offline');
|
||||
return false;
|
||||
}
|
||||
@@ -100,7 +118,7 @@ export const getNetworkStatus = (): NetworkStatus => {
|
||||
};
|
||||
|
||||
/**
|
||||
* 네트워크 상태 모니터링 시작
|
||||
* 네트워크 상태 모니터링 시작 함수 개선
|
||||
*/
|
||||
export const startNetworkMonitoring = (): void => {
|
||||
if (isMonitoring) {
|
||||
@@ -109,10 +127,11 @@ export const startNetworkMonitoring = (): void => {
|
||||
|
||||
isMonitoring = true;
|
||||
|
||||
// 초기 네트워크 상태를 온라인으로 설정 (실제 확인 전)
|
||||
setNetworkStatus('online');
|
||||
|
||||
// 초기 네트워크 상태 확인
|
||||
checkNetworkStatus().then(isOnline => {
|
||||
setNetworkStatus(isOnline ? 'online' : 'offline');
|
||||
|
||||
if (!isOnline) {
|
||||
// 오프라인 상태면 재연결 시도 시작
|
||||
reconnectTimer = setTimeout(attemptReconnect, RECONNECT_INTERVAL);
|
||||
|
||||
Reference in New Issue
Block a user