From daeaa52195e4d578fce6e60a61b044309ab3a871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20S=C3=B8rvig?= Date: Fri, 3 Mar 2023 12:50:52 +0100 Subject: [PATCH] Support multiple callbacks. --- src/library_async.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/library_async.js b/src/library_async.js index eaa3da9ba..02f435370 100644 --- a/src/library_async.js +++ b/src/library_async.js @@ -192,7 +192,7 @@ mergeInto(LibraryManager.library, { callStackNameToId: {}, callStackIdToName: {}, callStackId: 0, - asyncPromiseHandlers: null, // { resolve, reject } pair for when *all* asynchronicity is done + asyncPromiseHandlers: [], // { resolve, reject } pairs for when *all* asynchronicity is done sleepCallbacks: [], // functions to call every time we sleep getCallStackId: function(funcName) { @@ -233,13 +233,12 @@ mergeInto(LibraryManager.library, { whenDone: function() { #if ASSERTIONS assert(Asyncify.currData, 'Tried to wait for an async operation when none is in progress.'); - assert(!Asyncify.asyncPromiseHandlers, 'Cannot have multiple async operations in flight at once'); #endif return new Promise((resolve, reject) => { - Asyncify.asyncPromiseHandlers = { + Asyncify.asyncPromiseHandlers.push({ resolve: resolve, reject: reject - }; + }); }); }, @@ -368,10 +367,11 @@ mergeInto(LibraryManager.library, { // that may have called C functions that // call `Asyncify.handleSleep()`. var asyncPromiseHandlers = Asyncify.asyncPromiseHandlers; - if (asyncPromiseHandlers) { - Asyncify.asyncPromiseHandlers = null; - (isError ? asyncPromiseHandlers.reject : asyncPromiseHandlers.resolve)(asyncWasmReturnValue); - handled = true; + if (asyncPromiseHandlers.length > 0) { + for (handler of asyncPromiseHandlers) + (isError ? handler.reject : handler.resolve)(asyncWasmReturnValue); + Asyncify.asyncPromiseHandlers = [] + handled = true; } } if (isError && !handled) { -- 2.37.1 (Apple Git-137.1)