Cleanup timeout issue
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user