fix(dashboard-v2): fix possible race condition

This commit is contained in:
Michał Leszczyk 2022-03-25 10:53:16 +01:00
parent c7b8c31dbb
commit be82050b86
No known key found for this signature in database
GPG Key ID: FA123CA8BAA2FBF4
1 changed files with 14 additions and 4 deletions

View File

@ -19,18 +19,25 @@ const EmailConfirmationPage = ({ location }) => {
const [state, setState] = useState(State.Pure); const [state, setState] = useState(State.Pure);
useEffect(() => { useEffect(() => {
const controller = new AbortController();
let timer; let timer;
async function confirm(token) { async function confirm(token) {
try { try {
await accountsService.get("user/confirm", { searchParams: { token } }); await accountsService.get("user/confirm", {
signal: controller.signal,
searchParams: { token },
});
timer = setTimeout(() => { timer = setTimeout(() => {
navigate("/"); navigate("/");
}, 3000); }, 3000);
setState(State.Success); setState(State.Success);
} catch { } catch (err) {
setState(State.Failure); // Don't show an error message if request was aborted due to `token` changing.
if (err.code !== DOMException.ABORT_ERR) {
setState(State.Failure);
}
} }
} }
@ -38,7 +45,10 @@ const EmailConfirmationPage = ({ location }) => {
confirm(token); confirm(token);
} }
return () => clearTimeout(timer); return () => {
controller.abort();
clearTimeout(timer);
};
}, [token]); }, [token]);
return ( return (