diff --git a/lib/shared/search-utils.js b/lib/shared/search-utils.js --- a/lib/shared/search-utils.js +++ b/lib/shared/search-utils.js @@ -363,7 +363,10 @@ const [potentialMembers, setPotentialMembers] = React.useState< UserListItem[], >([]); + const requestIdRef = React.useRef(0); React.useEffect(() => { + requestIdRef.current = requestIdRef.current + 1; + const currentRequestId = requestIdRef.current; void (async () => { const usersIDs = sortedMembers.map(user => user.id); const [thickThreadUsers, farcasterUsers] = await Promise.all([ @@ -391,6 +394,9 @@ }; }) .filter(Boolean); + if (currentRequestId !== requestIdRef.current) { + return; + } setPotentialMembers(usersWithProtocol); })(); }, [ @@ -521,12 +527,15 @@ const findFarcasterDCUsers = useGetFarcasterDirectCastUsers(); const dispatchActionPromise = useDispatchActionPromise(); + const requestIdRef = React.useRef(0); React.useEffect(() => { if (forwardLookupSearchText.length === 0) { setSearchResults([]); return; } + requestIdRef.current = requestIdRef.current + 1; + const currentRequestId = requestIdRef.current; const searchUsersPromise = (async () => { const foundInfos: Array = []; @@ -575,12 +584,18 @@ await Promise.all([identityPromise, farcasterPromise]); + if (currentRequestId !== requestIdRef.current) { + return; + } if (foundInfos.length > 0 || skipCommUsers) { setSearchResultsFromServer(foundInfos); return; } const { userInfos: keyserverSearchResult } = await callLegacyAshoatKeyserverSearchUsers(forwardLookupSearchText); + if (currentRequestId !== requestIdRef.current) { + return; + } setSearchResultsFromServer(keyserverSearchResult); })(); void dispatchActionPromise(searchUsersActionTypes, searchUsersPromise);