🐽 Makes model-loading use result type for error handling

This commit is contained in:
Rune Harlyk
2024-02-23 00:59:43 +01:00
parent 1f8d753dd7
commit e7788fb3a0
2 changed files with 14 additions and 7 deletions
+9 -3
View File
@@ -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 = () => {
+5 -4
View File
@@ -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<Result<[URDFRobot, string[]], string>> => {
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));
});