webassembly/proxy_c: Ensure objs thrown into generators are exceptions.

This commit defines a new `JsException` exception type which is used on the
Python side to wrap JavaScript errors.  That's then used when a JavaScript
Promise is rejected, and the reason is then converted to a `JsException`
for the Python side to handle.

This new exception is exposed as `jsffi.JsException`.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George
2024-05-09 15:11:21 +10:00
parent 3f34be69c7
commit a67e326cb9
5 changed files with 64 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
// Test await'ing on a JavaScript async function that throws a JavaScript Error.
const mp = await (await import(process.argv[2])).loadMicroPython();
globalThis.foo = async () => {
console.log(2);
throw Error("test");
};
await mp.runPythonAsync(`
import js, jsffi
print(1)
try:
await js.foo()
except jsffi.JsException as er:
error = er
print(error)
print(3)
`);
const error = mp.globals.get("error");
console.log(error instanceof Error, error.name, error.message);

View File

@@ -0,0 +1,5 @@
1
2
(<JsProxy 6>, 'Error', 'test')
3
true Error test