Cleanup timeout issue

This commit is contained in:
Peter Stockings
2025-07-26 22:17:54 +10:00
parent 2fbace641d
commit de5c56e530

View File

@@ -72,39 +72,45 @@ async function handler(req: Request): Promise<Response> {
} = body;
const executionPromise = new Promise((resolve, reject) => {
const messageHandler = (e) => {
resolve(e.data);
cleanup();
};
const errorHandler = (e) => {
reject(new Error(`Worker error: ${e.message}`));
cleanup();
};
let timeoutId: number;
const cleanup = () => {
availableWorker.worker.removeEventListener("message", messageHandler);
availableWorker.worker.removeEventListener("error", errorHandler);
if (timeoutId) clearTimeout(timeoutId);
};
const messageHandler = (e: MessageEvent) => {
cleanup();
resolve(e.data);
};
const errorHandler = (e: ErrorEvent) => {
cleanup();
reject(new Error(`Worker error: ${e.message}`));
};
timeoutId = setTimeout(() => {
cleanup();
reject(new Error("Timeout"));
}, TIMEOUT_MS);
availableWorker.worker.addEventListener("message", messageHandler);
availableWorker.worker.addEventListener("error", errorHandler);
availableWorker.worker.postMessage({ code, request, environment, name });
});
const timeoutPromise = new Promise((_, reject) =>
setTimeout(() => reject(new Error("Timeout")), TIMEOUT_MS)
);
availableWorker.worker.postMessage({ code, request, environment, name });
const startTime = performance.now();
try {
const result = await Promise.race([executionPromise, timeoutPromise]);
const result = await executionPromise;
return new Response(JSON.stringify(result), {
headers: { "Content-Type": "application/json" },
});
} catch (err) {
const executionTime = performance.now() - startTime;
const payload = {
status: States.TIMEOUT,
status: err.message === "Timeout" ? States.TIMEOUT : "ERROR",
result: err.message,
logs: [],
environment: environment,