From af3d732fc47a91aa8dad6c1c8126548e8ed2c886 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Thu, 30 Jan 2025 13:37:15 -0500 Subject: [PATCH] dev: async await for puter-exec --- src/puter-js/src/modules/Exec.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/puter-js/src/modules/Exec.js b/src/puter-js/src/modules/Exec.js index bffeecc4..f629b9f7 100644 --- a/src/puter-js/src/modules/Exec.js +++ b/src/puter-js/src/modules/Exec.js @@ -1,3 +1,4 @@ +import putility from '@heyputer/putility'; import * as utils from '../lib/utils.js'; export default class Exec { @@ -11,7 +12,18 @@ export default class Exec { // Exec Interface async exec (...args) { - return await utils.make_driver_method([ + const socket = puter.fs.socket; + const tokenPromise = new putility.libs.promise.TeePromise(); + const resultPromise = new putility.libs.promise.TeePromise(); + const listener = async result => { + const token = await tokenPromise; + if ( result.id !== token ) return; + resultPromise.resolve(result); + socket.off('submission.done', listener); + }; + socket.on('submission.done', listener); + + const { token } = await utils.make_driver_method([ 'runtime', 'code', 'stdin', ], 'puter-exec', undefined, 'exec', { transform: async (result) => { @@ -26,6 +38,8 @@ export default class Exec { return result; } }).call(this, ...args); + tokenPromise.resolve(token); + return await resultPromise; } // Internal