diff --git a/lib/actions/user-actions.js b/lib/actions/user-actions.js --- a/lib/actions/user-actions.js +++ b/lib/actions/user-actions.js @@ -395,26 +395,39 @@ state => state.commServicesAccessToken, ); + const promiseRef = React.useRef>(null); return React.useCallback( (source: string) => { + if (promiseRef.current) { + return promiseRef.current; + } + const { showAlert, isStaffRelease } = getConfig(); if (isStaffRelease) { showAlert('InvalidCSATLogOut', source); } const keyserverLogOutPromise = async () => { - // errors are swallowed inside `keyserverLogOut` above - const { keyserverIDs: _, ...result } = await callKeyserverLogOut({ - preRequestUserState, - }); - return { - ...result, - preRequestUserState: { - ...result.preRequestUserState, - commServicesAccessToken, - }, - }; + try { + // errors are swallowed inside `keyserverLogOut` above + const { keyserverIDs: _, ...result } = await callKeyserverLogOut({ + preRequestUserState, + }); + return { + ...result, + preRequestUserState: { + ...result.preRequestUserState, + commServicesAccessToken, + }, + }; + } finally { + promiseRef.current = null; + } }; - return dispatchActionPromise(logOutActionTypes, keyserverLogOutPromise()); + promiseRef.current = dispatchActionPromise( + logOutActionTypes, + keyserverLogOutPromise(), + ); + return promiseRef.current; }, [ dispatchActionPromise,