summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2024-05-09 15:07:11 +1000
committerDamien George <damien@micropython.org>2024-05-13 11:48:41 +1000
commit3f34be69c77dfbd1533af1f04ea460d7da2d118a (patch)
treed97fc0d148f2d0b34d0f67639579c9afeb1eada7
parentc37eb93f2dd75bf49c6cc5105494c5f176c3d541 (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.py2
-rw-r--r--tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs21
-rw-r--r--tests/ports/webassembly/asyncio_await_resolve_no_arg.mjs.exp5
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