diff --git a/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js b/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js
--- a/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js
+++ b/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js
@@ -138,8 +138,8 @@
         ongoingRecoveryAttempt.waitingCalls.push(r),
       );
     };
-    // This function is a helper for the next function defined below
-    const attemptToResolveInvalidation = async (
+    // These functions are helpers for cookieInvalidationRecovery, defined below
+    const attemptToResolveInvalidationHelper = async (
       sessionChange: ClientSessionChange,
     ) => {
       const newAnonymousCookie = sessionChange.cookie;
@@ -151,12 +151,7 @@
         keyserverID,
       );
 
-      const ongoingRecoveryAttempt =
-        ongoingRecoveryAttemptsRef.current.get(keyserverID);
-      ongoingRecoveryAttemptsRef.current.delete(keyserverID);
-      const currentWaitingCalls = ongoingRecoveryAttempt?.waitingCalls ?? [];
-
-      const newCallSingleKeyserverEndpoint = newSessionChange
+      return newSessionChange
         ? bindCookieAndUtilsIntoCallSingleKeyserverEndpoint({
             ...params,
             cookie: newSessionChange.cookie,
@@ -164,10 +159,33 @@
             currentUserInfo: newSessionChange.currentUserInfo,
           })
         : null;
-      for (const func of currentWaitingCalls) {
-        func(newCallSingleKeyserverEndpoint);
-      }
-      return newCallSingleKeyserverEndpoint;
+    };
+    const attemptToResolveInvalidation = (
+      sessionChange: ClientSessionChange,
+    ) => {
+      return new Promise<?CallSingleKeyserverEndpoint>(
+        // eslint-disable-next-line no-async-promise-executor
+        async (resolve, reject) => {
+          try {
+            const newCallSingleKeyserverEndpoint =
+              await attemptToResolveInvalidationHelper(sessionChange);
+            const ongoingRecoveryAttempt =
+              ongoingRecoveryAttemptsRef.current.get(keyserverID);
+            ongoingRecoveryAttemptsRef.current.delete(keyserverID);
+            const currentWaitingCalls =
+              ongoingRecoveryAttempt?.waitingCalls ?? [];
+
+            resolve(newCallSingleKeyserverEndpoint);
+
+            for (const func of currentWaitingCalls) {
+              func(newCallSingleKeyserverEndpoint);
+            }
+          } catch (e) {
+            reject(e);
+            return;
+          }
+        },
+      );
     };
     // If this function is called, callSingleKeyserverEndpoint got a response
     // invalidating its cookie, and is wondering if it should just like...