diff options
| author | Damien George <damien@micropython.org> | 2024-05-09 15:07:11 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-05-13 11:48:41 +1000 |
| commit | 3f34be69c77dfbd1533af1f04ea460d7da2d118a (patch) | |
| tree | d97fc0d148f2d0b34d0f67639579c9afeb1eada7 | |
| parent | c37eb93f2dd75bf49c6cc5105494c5f176c3d541 (diff) | |
webassembly/asyncio: Fix case where a Promise is resolved with no arg.
Signed-off-by: Damien George <damien@micropython.org>
| -rw-r--r-- | ports/webassembly/asyncio/core.py | 2 | ||||
| -rw-r--r-- | tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs | 21 | ||||
| -rw-r--r-- | tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs.exp | 5 |
3 files changed, 27 insertions, 1 deletions
diff --git a/ports/webassembly/asyncio/core.py b/ports/webassembly/asyncio/core.py index a128bb605..f6f9d19e5 100644 --- a/ports/webassembly/asyncio/core.py +++ b/ports/webassembly/asyncio/core.py @@ -75,7 +75,7 @@ class ThenableEvent: self.waiting = None # Task waiting on completion of this thenable thenable.then(self.set) - def set(self, value): + def set(self, value=None): # Thenable/Promise is fulfilled, set result and schedule any waiting task. self.result = value if self.waiting: diff --git a/tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs b/tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs new file mode 100644 index 000000000..0334a14f1 --- /dev/null +++ b/tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs @@ -0,0 +1,21 @@ +// Test an asyncio task await'ing on a Promise that's resolved without an argument. + +const mp = await (await import(process.argv[2])).loadMicroPython(); + +globalThis.foo = new Promise((resolve) => { + console.log(1); + resolve(); // resolve without an argument + console.log(2); +}); + +mp.runPython(` +import asyncio +import js + +async def task(): + print(3) + print(await js.foo) + print(4) + +asyncio.create_task(task()) +`); diff --git a/tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs.exp b/tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs.exp new file mode 100644 index 000000000..f3ca0f268 --- /dev/null +++ b/tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs.exp @@ -0,0 +1,5 @@ +1 +2 +3 +None +4 |
