Skip to content

Commit fd982fa

Browse files
psychedelicioushipsterusername
authored andcommitted
fix(ui): prevent unhandled promise rejections
1 parent df86ed6 commit fd982fa

File tree

3 files changed

+37
-20
lines changed

3 files changed

+37
-20
lines changed

invokeai/frontend/web/src/features/gallery/hooks/useImageActions.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ export const useImageActions = (imageDTO: ImageDTO) => {
4646
setHasSeed(false);
4747
}
4848

49+
// Need to catch all of these to avoid unhandled promise rejections bubbling up to instrumented error handlers
4950
const promptParseResults = await Promise.allSettled([
50-
handlers.positivePrompt.parse(metadata),
51-
handlers.negativePrompt.parse(metadata),
52-
handlers.sdxlPositiveStylePrompt.parse(metadata),
53-
handlers.sdxlNegativeStylePrompt.parse(metadata),
51+
handlers.positivePrompt.parse(metadata).catch(() => {}),
52+
handlers.negativePrompt.parse(metadata).catch(() => {}),
53+
handlers.sdxlPositiveStylePrompt.parse(metadata).catch(() => {}),
54+
handlers.sdxlNegativeStylePrompt.parse(metadata).catch(() => {}),
5455
]);
5556
if (promptParseResults.some((result) => result.status === 'fulfilled')) {
5657
setHasPrompts(true);
@@ -97,9 +98,14 @@ export const useImageActions = (imageDTO: ImageDTO) => {
9798
if (!metadata) {
9899
return;
99100
}
100-
handlers.seed.parse(metadata).then((seed) => {
101-
handlers.seed.recall && handlers.seed.recall(seed, true);
102-
});
101+
handlers.seed
102+
.parse(metadata)
103+
.then((seed) => {
104+
handlers.seed.recall?.(seed, true);
105+
})
106+
.catch(() => {
107+
// no-op, the toast will show the error
108+
});
103109
}, [metadata]);
104110

105111
const recallPrompts = useCallback(() => {

invokeai/frontend/web/src/features/metadata/components/MetadataLoRAs.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ const MetadataViewLoRA = ({
4747
if (!handlers.recallItem) {
4848
return;
4949
}
50-
handlers.recallItem(lora, true);
50+
handlers.recallItem(lora, true).catch(() => {
51+
// no-op, the toast will show the error
52+
});
5153
}, [handlers, lora]);
5254

5355
const [renderedValue, setRenderedValue] = useState<React.ReactNode>(null);

invokeai/frontend/web/src/features/metadata/hooks/useMetadataItem.tsx

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
2121
const [renderedValueInternal, setRenderedValueInternal] = useState<React.ReactNode>(null);
2222

2323
useEffect(() => {
24-
const _parse = async () => {
25-
try {
26-
const parsed = await handlers.parse(metadata);
27-
setValue(parsed);
28-
} catch (e) {
29-
setValue(MetadataParseFailedToken);
30-
}
24+
const _parse = () => {
25+
handlers
26+
.parse(metadata)
27+
.then((parsed) => {
28+
setValue(parsed);
29+
})
30+
.catch(() => {
31+
setValue(MetadataParseFailedToken);
32+
});
3133
};
3234
_parse();
3335
}, [handlers, metadata]);
@@ -37,7 +39,7 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
3739
const label = useMemo(() => handlers.getLabel(), [handlers]);
3840

3941
useEffect(() => {
40-
const _renderValue = async () => {
42+
const _renderValue = () => {
4143
if (value === MetadataParsePendingToken) {
4244
setRenderedValueInternal(null);
4345
return;
@@ -47,9 +49,14 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
4749
return;
4850
}
4951

50-
const rendered = await handlers.renderValue(value);
51-
52-
setRenderedValueInternal(rendered);
52+
handlers
53+
.renderValue(value)
54+
.then((rendered) => {
55+
setRenderedValueInternal(rendered);
56+
})
57+
.catch(() => {
58+
// no-op
59+
});
5360
};
5461

5562
_renderValue();
@@ -69,7 +76,9 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
6976
if (!handlers.recall || value === MetadataParsePendingToken || value === MetadataParseFailedToken) {
7077
return null;
7178
}
72-
handlers.recall(value, true);
79+
handlers.recall(value, true).catch(() => {
80+
// no-op, the toast will show the error
81+
});
7382
}, [handlers, value]);
7483

7584
const valueOrNull = useMemo(() => {

0 commit comments

Comments
 (0)