fix: suppress unhandled promise rejections from fire-and-forget useEffect loads

useAsync re-throws errors after storing them in state — correct for awaited
callers but causes unhandled rejections when load() is called without .catch()
in useEffects. The error is already captured in AsyncState.Error so the
re-throw provides no additional value in these fire-and-forget patterns.

Fixes JAVASCRIPT-REACT-M (Sentry: Media download failed: 401 Unauthorized)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-02 10:01:04 -04:00
parent 0bbfe17559
commit 7bafefa5e7
6 changed files with 6 additions and 6 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ export function ClientConfigLoader({ fallback, error, children }: ClientConfigLo
const ignoreCallback = useCallback(() => setIgnoreError(true), []);
useEffect(() => {
load();
void load().catch(() => undefined);
}, [load]);
if (state.status === AsyncStatus.Idle || state.status === AsyncStatus.Loading) {
@@ -113,7 +113,7 @@ export const ImageContent = as<'div', ImageContentProps>(
};
useEffect(() => {
if (autoPlay) loadSrc();
if (autoPlay) void loadSrc().catch(() => undefined);
}, [autoPlay, loadSrc]);
return (
@@ -37,7 +37,7 @@ export function ThumbnailContent({ info, renderImage }: ThumbnailContentProps) {
);
useEffect(() => {
loadThumbSrc();
void loadThumbSrc().catch(() => undefined);
}, [loadThumbSrc]);
return thumbSrcState.status === AsyncStatus.Success ? renderImage(thumbSrcState.data) : null;
@@ -106,7 +106,7 @@ export const VideoContent = as<'div', VideoContentProps>(
};
useEffect(() => {
if (autoPlay) loadSrc();
if (autoPlay) void loadSrc().catch(() => undefined);
}, [autoPlay, loadSrc]);
return (
@@ -106,7 +106,7 @@ export function EditHistoryModal({ room, mEvent, onClose }: EditHistoryModalProp
);
useEffect(() => {
fetchHistory();
void fetchHistory().catch(() => undefined);
}, [fetchHistory]);
const formatTs = (ts: number): string => {
+1 -1
View File
@@ -114,7 +114,7 @@ export const useAsyncCallbackValue = <TData, TError>(
const [state, load] = useAsyncCallback<TData, TError, []>(asyncCallback);
useEffect(() => {
load();
void load().catch(() => undefined);
}, [load]);
return [state, load];