From fad082195b4f9ce51291d4a15c0b931674301ea4 Mon Sep 17 00:00:00 2001 From: FragginWagon Date: Wed, 28 Jan 2026 21:08:10 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Refactor=20search=20worker=20ini?= =?UTF-8?q?tialization=20to=20use=20a=20promise=20for=20improved=20error?= =?UTF-8?q?=20handling=20and=20retry=20capability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/GamemasterExplorer.vue | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/code/websites/pokedex.online/src/views/GamemasterExplorer.vue b/code/websites/pokedex.online/src/views/GamemasterExplorer.vue index c9a53ee..05006af 100644 --- a/code/websites/pokedex.online/src/views/GamemasterExplorer.vue +++ b/code/websites/pokedex.online/src/views/GamemasterExplorer.vue @@ -399,37 +399,33 @@ const client = new GamemasterClient(); // Web Worker for search operations let searchWorker = null; let searchWorkerRequestId = 0; +let searchWorkerInitPromise = null; + const initSearchWorker = () => { - if (!searchWorker) { - try { - // Use Vite's ?worker syntax for proper bundling - import('../workers/search.worker.js?worker') - .then(module => { - searchWorker = new module.default(); - console.log('✅ Worker created successfully'); + if (!searchWorkerInitPromise) { + searchWorkerInitPromise = import('../workers/search.worker.js?worker') + .then(module => { + searchWorker = new module.default(); + console.log('✅ Worker created successfully'); - searchWorker.onmessage = handleSearchWorkerMessage; - searchWorker.onerror = error => { - console.error('❌ Worker error:', error.message); - operationProgress.value.active = false; - operationProgress.value.message = 'Search error: ' + error.message; - }; - - console.log('✅ Worker event handlers attached'); - }) - .catch(error => { - console.error('❌ Failed to import worker:', error); + searchWorker.onmessage = handleSearchWorkerMessage; + searchWorker.onerror = error => { + console.error('❌ Worker error:', error.message); operationProgress.value.active = false; - operationProgress.value.message = 'Failed to initialize search'; - searchWorker = null; - }); - } catch (error) { - console.error('❌ Failed to create worker:', error); - operationProgress.value.active = false; - operationProgress.value.message = 'Failed to initialize search'; - searchWorker = null; - } + operationProgress.value.message = 'Search error: ' + error.message; + }; + + console.log('✅ Worker event handlers attached'); + return searchWorker; + }) + .catch(error => { + console.error('❌ Failed to import worker:', error); + searchWorker = null; + searchWorkerInitPromise = null; // Reset so we can retry + throw error; + }); } + return searchWorkerInitPromise; }; const handleSearchWorkerMessage = event => {