From cc9c2da7b816a41987000dd662f04dbc2033a600 Mon Sep 17 00:00:00 2001 From: Artur Date: Thu, 28 Oct 2021 11:00:52 +0300 Subject: [PATCH] fix: do not overwrite pendingReload promise (fix #5448) (#5452) --- .../src/node/optimizer/registerMissing.ts | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/vite/src/node/optimizer/registerMissing.ts b/packages/vite/src/node/optimizer/registerMissing.ts index 6883fc9f262a81..6071228b566f30 100644 --- a/packages/vite/src/node/optimizer/registerMissing.ts +++ b/packages/vite/src/node/optimizer/registerMissing.ts @@ -15,7 +15,7 @@ export function createMissingImporterRegisterFn( const { logger } = server.config let knownOptimized = server._optimizeDepsMetadata!.optimized let currentMissing: Record = {} - let handle: NodeJS.Timeout + let handle: NodeJS.Timeout | undefined let pendingResolve: (() => void) | null = null @@ -70,8 +70,11 @@ export function createMissingImporterRegisterFn( ) } finally { server._isRunningOptimizer = false - pendingResolve && pendingResolve() - server._pendingReload = pendingResolve = null + if (!handle) { + // No other rerun() pending so resolve and let pending requests proceed + pendingResolve && pendingResolve() + server._pendingReload = pendingResolve = null + } } // Cached transform results have stale imports (resolved to @@ -93,10 +96,15 @@ export function createMissingImporterRegisterFn( if (!knownOptimized[id]) { currentMissing[id] = resolved if (handle) clearTimeout(handle) - handle = setTimeout(() => rerun(ssr), debounceMs) - server._pendingReload = new Promise((r) => { - pendingResolve = r - }) + handle = setTimeout(() => { + handle = undefined + rerun(ssr) + }, debounceMs) + if (!server._pendingReload) { + server._pendingReload = new Promise((r) => { + pendingResolve = r + }) + } } } }