diff --git a/src/client/pythonEnvironments/base/locators/composite/envsCollectionService.ts b/src/client/pythonEnvironments/base/locators/composite/envsCollectionService.ts index 64760cec9b46..54887ce732fa 100644 --- a/src/client/pythonEnvironments/base/locators/composite/envsCollectionService.ts +++ b/src/client/pythonEnvironments/base/locators/composite/envsCollectionService.ts @@ -86,20 +86,25 @@ export class EnvsCollectionService extends PythonEnvsWatcher { - this.refreshPromises.delete(query); - sendTelemetryEvent(EventName.PYTHON_INTERPRETER_DISCOVERY, stopWatch.elapsedTime, { - interpreters: this.cache.getAllEnvs().length, - }); - }); + const deferred = createDeferred(); + // Ensure we set this before we trigger the promise to correctly indicate when a refresh has started. + this.refreshPromises.set(query, deferred.promise); + const promise = this.addEnvsToCacheFromIterator(iterator); + return promise + .then(async () => { + deferred.resolve(); + this.refreshPromises.delete(query); + sendTelemetryEvent(EventName.PYTHON_INTERPRETER_DISCOVERY, stopWatch.elapsedTime, { + interpreters: this.cache.getAllEnvs().length, + }); + }) + .catch((ex) => deferred.reject(ex)); } private async addEnvsToCacheFromIterator(iterator: IPythonEnvsIterator) { const seen: PythonEnvInfo[] = []; const state = { - done: true, + done: false, pending: 0, }; const updatesDone = createDeferred();