diff --git a/src/common/Backend.ts b/src/common/Backend.ts index 3da362edf..d98753eac 100644 --- a/src/common/Backend.ts +++ b/src/common/Backend.ts @@ -1,4 +1,4 @@ -import axios, { AxiosRequestConfig } from 'axios'; +import axios, { AxiosRequestConfig, Cancel } from 'axios'; import { BackendJsonNode, Category, @@ -17,6 +17,7 @@ import { SchemaId, Version, } from './common-types'; +import { assertNever } from './util'; export interface BackendSuccessResponse { type: 'success'; @@ -133,6 +134,21 @@ export class ServerError extends Error { return new ServerError(json.message, json.description, json.status); } } +export class CancelError extends Error { + message: string; + + config: AxiosRequestConfig | undefined; + + constructor(message: string | undefined, config?: AxiosRequestConfig) { + super(); + this.message = message ?? 'The request was cancelled'; + this.config = config; + } + + static fromCancel(cancelData: Cancel, config?: AxiosRequestConfig): CancelError { + return new CancelError(cancelData.message, config); + } +} /** * A wrapper to communicate with the backend. @@ -182,6 +198,10 @@ export class Backend { if (error.response?.data) { return error.response.data as T; } + if (axios.isCancel(error)) { + throw CancelError.fromCancel(error, error.config); + } + assertNever(error); } if (ServerError.isJson(error)) { throw ServerError.fromJson(error); diff --git a/src/renderer/contexts/ExecutionContext.tsx b/src/renderer/contexts/ExecutionContext.tsx index df76ecdaa..5a665578a 100644 --- a/src/renderer/contexts/ExecutionContext.tsx +++ b/src/renderer/contexts/ExecutionContext.tsx @@ -8,6 +8,7 @@ import { BackendEventMap, BackendStatusResponse, BackendWorkerStatusResponse, + CancelError, } from '../../common/Backend'; import { EdgeData, NodeData, OutputId } from '../../common/common-types'; import { formatExecutionErrorMessage } from '../../common/formatExecutionErrorMessage'; @@ -478,7 +479,7 @@ export const ExecutionProvider = memo(({ children }: React.PropsWithChildren<{}> }); } } catch (err: unknown) { - if (!(err instanceof DOMException && err.name === 'AbortError')) { + if (!(err instanceof CancelError)) { sendAlert({ type: AlertType.ERROR, message: `An unexpected error occurred: ${String(err)}`,