fix(ui): prevent unhandled promise rejections

This commit is contained in:
psychedelicious
2024-10-03 19:06:10 +10:00
committed by Kent Keirsey
parent df86ed653a
commit fd982fa7c2
3 changed files with 37 additions and 20 deletions

View File

@@ -46,11 +46,12 @@ export const useImageActions = (imageDTO: ImageDTO) => {
setHasSeed(false);
}
// Need to catch all of these to avoid unhandled promise rejections bubbling up to instrumented error handlers
const promptParseResults = await Promise.allSettled([
handlers.positivePrompt.parse(metadata),
handlers.negativePrompt.parse(metadata),
handlers.sdxlPositiveStylePrompt.parse(metadata),
handlers.sdxlNegativeStylePrompt.parse(metadata),
handlers.positivePrompt.parse(metadata).catch(() => {}),
handlers.negativePrompt.parse(metadata).catch(() => {}),
handlers.sdxlPositiveStylePrompt.parse(metadata).catch(() => {}),
handlers.sdxlNegativeStylePrompt.parse(metadata).catch(() => {}),
]);
if (promptParseResults.some((result) => result.status === 'fulfilled')) {
setHasPrompts(true);
@@ -97,9 +98,14 @@ export const useImageActions = (imageDTO: ImageDTO) => {
if (!metadata) {
return;
}
handlers.seed.parse(metadata).then((seed) => {
handlers.seed.recall && handlers.seed.recall(seed, true);
});
handlers.seed
.parse(metadata)
.then((seed) => {
handlers.seed.recall?.(seed, true);
})
.catch(() => {
// no-op, the toast will show the error
});
}, [metadata]);
const recallPrompts = useCallback(() => {

View File

@@ -47,7 +47,9 @@ const MetadataViewLoRA = ({
if (!handlers.recallItem) {
return;
}
handlers.recallItem(lora, true);
handlers.recallItem(lora, true).catch(() => {
// no-op, the toast will show the error
});
}, [handlers, lora]);
const [renderedValue, setRenderedValue] = useState<React.ReactNode>(null);

View File

@@ -21,13 +21,15 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
const [renderedValueInternal, setRenderedValueInternal] = useState<React.ReactNode>(null);
useEffect(() => {
const _parse = async () => {
try {
const parsed = await handlers.parse(metadata);
setValue(parsed);
} catch (e) {
setValue(MetadataParseFailedToken);
}
const _parse = () => {
handlers
.parse(metadata)
.then((parsed) => {
setValue(parsed);
})
.catch(() => {
setValue(MetadataParseFailedToken);
});
};
_parse();
}, [handlers, metadata]);
@@ -37,7 +39,7 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
const label = useMemo(() => handlers.getLabel(), [handlers]);
useEffect(() => {
const _renderValue = async () => {
const _renderValue = () => {
if (value === MetadataParsePendingToken) {
setRenderedValueInternal(null);
return;
@@ -47,9 +49,14 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
return;
}
const rendered = await handlers.renderValue(value);
setRenderedValueInternal(rendered);
handlers
.renderValue(value)
.then((rendered) => {
setRenderedValueInternal(rendered);
})
.catch(() => {
// no-op
});
};
_renderValue();
@@ -69,7 +76,9 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
if (!handlers.recall || value === MetadataParsePendingToken || value === MetadataParseFailedToken) {
return null;
}
handlers.recall(value, true);
handlers.recall(value, true).catch(() => {
// no-op, the toast will show the error
});
}, [handlers, value]);
const valueOrNull = useMemo(() => {