From 014ae4185f4226b2ebc43f367cec2a0498fdc6cf Mon Sep 17 00:00:00 2001 From: Bruno Windels <274386+bwindels@users.noreply.github.com> Date: Fri, 6 Jan 2023 17:01:57 +0100 Subject: [PATCH] WIP --- src/utils/ErrorBoundary.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/utils/ErrorBoundary.ts diff --git a/src/utils/ErrorBoundary.ts b/src/utils/ErrorBoundary.ts new file mode 100644 index 00000000..e9f297c5 --- /dev/null +++ b/src/utils/ErrorBoundary.ts @@ -0,0 +1,38 @@ +/* +Copyright 2023 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {ObservableValue, BaseObservableValue} from "../observable/ObservableValue"; + +export class ErrorBoundary { + constructor(private readonly errorCallback: (Error) => void) {} + + try(callback: () => T): T | undefined; + try(callback: () => Promise): Promise | undefined { + try { + let result: T | Promise = callback(); + if (result instanceof Promise) { + result = result.catch(err => { + this.errorCallback(err); + return undefined; + }); + } + return result; + } catch (err) { + this.errorCallback(err); + return undefined; + } + } +}