From da1769920abdf4548835b13601e2a77de27d4773 Mon Sep 17 00:00:00 2001 From: Hamza Ali Date: Sun, 21 Mar 2021 20:49:28 +0700 Subject: [PATCH] feat(js): implement wrapper for interfacing with Go functions in JS --- src/bridge.js | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/bridge.js b/src/bridge.js index 1b15b34..6073124 100644 --- a/src/bridge.js +++ b/src/bridge.js @@ -7,6 +7,26 @@ const maxTime = 3 * 1000; const bridge = g.__go_wasm__; + +/** + * Wrapper is used by Go to run all Go functions in JS. + * Go functions always return an object of the following spec: + * { + * result: undefined | any // undefined when error is returned, or function returns undefined + * error: Error | undefined // undefined when no error is present + * } + */ +function wrapper(goFunc) { + return (...args) => { + const result = goFunc.apply(undefined, args); + if (result.error instanceof Error) { + throw result.error; + } + return result.result; + } +} +bridge.__wrapper__ = wrapper + function sleep() { return new Promise(requestAnimationFrame); } @@ -44,14 +64,11 @@ export default function (getBytes) { return; } - const returnObj = bridge[key].apply(undefined, args); - if (returnObj.error instanceof Error) { - return rej(returnObj.error) + try { + res(bridge[key].apply(undefined, args)); + } catch (e) { + rej(e) } - - if (returnObj.result) return res(returnObj.result); - - return res(returnObj) }) }; }