From d08be4078fcfc276bab2ee5aded53c19e5b745e3 Mon Sep 17 00:00:00 2001 From: dpiercey Date: Thu, 20 Feb 2025 18:35:36 -0700 Subject: [PATCH] fix: in/out of order await nesting --- .changeset/sour-cherries-allow.md | 5 +++++ .../runtime-class/src/core-tags/core/await/renderer.js | 5 ++++- .../src/core-tags/core/await/reorderer-renderer.js | 9 ++++----- 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 .changeset/sour-cherries-allow.md diff --git a/.changeset/sour-cherries-allow.md b/.changeset/sour-cherries-allow.md new file mode 100644 index 0000000000..1d1cbfa4cd --- /dev/null +++ b/.changeset/sour-cherries-allow.md @@ -0,0 +1,5 @@ +--- +"marko": patch +--- + +Fix issue with nesting out of order awaits inside of in order awaits. diff --git a/packages/runtime-class/src/core-tags/core/await/renderer.js b/packages/runtime-class/src/core-tags/core/await/renderer.js index 2fef66805e..278611d9da 100644 --- a/packages/runtime-class/src/core-tags/core/await/renderer.js +++ b/packages/runtime-class/src/core-tags/core/await/renderer.js @@ -113,6 +113,7 @@ module.exports = function awaitTag(input, out) { clientReorderContext = out.global.___clientReorderContext || (out.global.___clientReorderContext = { + handleAwait: undefined, instances: [], nextId: 0, }); @@ -158,7 +159,9 @@ module.exports = function awaitTag(input, out) { oldEmit.apply(asyncOut, arguments); }; - if (clientReorderContext.instances) { + if (clientReorderContext.handleAwait) { + clientReorderContext.handleAwait(awaitInfo); + } else { clientReorderContext.instances.push(awaitInfo); } diff --git a/packages/runtime-class/src/core-tags/core/await/reorderer-renderer.js b/packages/runtime-class/src/core-tags/core/await/reorderer-renderer.js index ea067b8e23..6f1941e3b6 100644 --- a/packages/runtime-class/src/core-tags/core/await/reorderer-renderer.js +++ b/packages/runtime-class/src/core-tags/core/await/reorderer-renderer.js @@ -143,14 +143,13 @@ module.exports = function (input, out) { } awaitContext.instances.forEach(handleAwait); - - out.on("await:clientReorder", function (awaitInfo) { + awaitContext.handleAwait = function (awaitInfo) { remaining++; handleAwait(awaitInfo); - }); + }; // Now that we have a listener attached, we want to receive any additional - // out-of-sync instances via an event - delete awaitContext.instances; + // out-of-sync instances via the method + awaitContext.instances = undefined; }); };