From e7788fb3a0c57d5cfbeb233d59837b15b0856a09 Mon Sep 17 00:00:00 2001 From: Rune Harlyk Date: Fri, 23 Feb 2024 00:59:43 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=BD=20Makes=20model-loading=20use=20re?= =?UTF-8?q?sult=20type=20for=20error=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/App.svelte | 12 +++++++++--- app/src/lib/utilities/model-utilities.ts | 9 +++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/App.svelte b/app/src/App.svelte index aac816c..032d8ee 100644 --- a/app/src/App.svelte +++ b/app/src/App.svelte @@ -15,9 +15,15 @@ onMount(async () => { socketService.connect(socketLocation); registerFetchIntercept() - const [urdf, JOINT_NAME] = await loadModelAsync('/spot_micro.urdf.xacro') - jointNames.set(JOINT_NAME) - model.set(urdf) + const modelRes = await loadModelAsync('/spot_micro.urdf.xacro') + + if (modelRes.isOk()) { + const [urdf, JOINT_NAME] = modelRes.inner + jointNames.set(JOINT_NAME) + model.set(urdf) + } else { + console.error(modelRes.inner, {"exception": modelRes.exception}) + } }); const registerFetchIntercept = () => { diff --git a/app/src/lib/utilities/model-utilities.ts b/app/src/lib/utilities/model-utilities.ts index 332dfc5..625569f 100644 --- a/app/src/lib/utilities/model-utilities.ts +++ b/app/src/lib/utilities/model-utilities.ts @@ -1,8 +1,9 @@ import { LoaderUtils } from "three"; import URDFLoader, { type URDFRobot } from "urdf-loader" import { XacroLoader } from "xacro-parser" +import { Result } from "$lib/utilities"; -export const loadModelAsync = async (url:string):Promise<[URDFRobot, string[]]> => { +export const loadModelAsync = async (url:string):Promise> => { return new Promise((resolve, reject) => { const xacroLoader = new XacroLoader(); @@ -22,9 +23,9 @@ export const loadModelAsync = async (url:string):Promise<[URDFRobot, string[]]> .filter(joint => joint[1].jointType !== 'fixed') .map(joint => joint[0]) - resolve([model, joints]); - } catch (error) { - reject(error); + resolve(Result.ok([model, joints])); + } catch (error) { + resolve(Result.err("Failed to load model", error)); } }, (error) => reject(error)); });