Skip to content

Commit fde6002

Browse files
authored
[KW-695] fix: QR 스캔 로직 수정 (#36)
* KW-695/fix: QR 인식 후 쿨타임, 메세지 표시타임을 1.5초로 통일 * KW-695/fix: verifyQR 응답 지연 방지를 위한 타임아웃 로직 추가
1 parent 2782263 commit fde6002

1 file changed

Lines changed: 20 additions & 7 deletions

File tree

src/pages/QRCodeScanner.tsx

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const QRCodeScanner = () => {
5050
setTimeout(() => {
5151
setShowPopup(false);
5252
setIsScanning(false);
53-
}, 5000);
53+
}, 1500);
5454
};
5555

5656
useEffect(() => {
@@ -64,6 +64,15 @@ const QRCodeScanner = () => {
6464
false
6565
);
6666

67+
const verifyWithTimeout = (payload: any, timeoutMs = 2000) => { // 타임아웃 2초
68+
return Promise.race([
69+
verifyQR(payload),
70+
new Promise((_, reject) =>
71+
setTimeout(() => reject(new Error("timeout")), timeoutMs)
72+
)
73+
]);
74+
};
75+
6776
const handleScan = async (parsed: any) => {
6877
const deviceAreaCode = localStorage.getItem("deviceAreaCode") || "";
6978
const deviceAreaId = localStorage.getItem("deviceAreaId");
@@ -85,16 +94,20 @@ const QRCodeScanner = () => {
8594

8695
console.log("출입 verify 요청 payload:", payload);
8796

88-
const result = await verifyQR(payload);
97+
const result = await verifyWithTimeout(payload);
8998
console.log("출입 검증 result:", result?.success);
9099

91100
if (result?.success) {
92101
showMessage(STATUS_MESSAGES.ACCESS_GRANTED);
93102
} else {
94103
showMessage(STATUS_MESSAGES.ACCESS_DENIED);
95104
}
96-
} catch (err: unknown) {
97-
console.error("출입 데이터 전송 실패", err);
105+
} catch (err: any) {
106+
if (err.message === "timeout") {
107+
console.error("출입 검증 응답 지연으로 타임아웃 발생");
108+
} else {
109+
console.error("출입 데이터 전송 실패", err);
110+
}
98111
showMessage(STATUS_MESSAGES.VERIFY_FAILED);
99112
}
100113
} else {
@@ -111,14 +124,14 @@ const QRCodeScanner = () => {
111124
(decodedText: string) => {
112125
if (isScanningRef.current) return;
113126

114-
isScanningRef.current = true; // 10초간 QR 인식 일시차단
127+
isScanningRef.current = true; // 1.5초간 QR 인식 일시차단
115128
console.log("QR 인식됨:", decodedText);
116129

117130
setIsScanning(true);
118131
setTimeout(() => {
119-
isScanningRef.current = false; // 10초 후 해제
132+
isScanningRef.current = false; // 1.5초 후 해제
120133
setIsScanning(false);
121-
}, 10000);
134+
}, 1500);
122135

123136
let parsed: Record<string, any> | string = decodedText;
124137

0 commit comments

Comments
 (0)