diff --git a/packages/common/nbstore/src/connection/connection.ts b/packages/common/nbstore/src/connection/connection.ts index 28b7fe2f7..1416a09b3 100644 --- a/packages/common/nbstore/src/connection/connection.ts +++ b/packages/common/nbstore/src/connection/connection.ts @@ -24,7 +24,9 @@ export interface Connection { export abstract class AutoReconnectConnection implements Connection { - private readonly event = new EventEmitter2(); + private readonly event = new EventEmitter2({ + maxListeners: 100, + }); private _inner: T | undefined = undefined; private _status: ConnectionStatus = 'idle'; private _error: Error | undefined = undefined; @@ -168,14 +170,16 @@ export abstract class AutoReconnectConnection return; } - this.onStatusChanged(status => { + const off = this.onStatusChanged(status => { if (status === 'connected') { resolve(); + off(); } }); signal?.addEventListener('abort', reason => { reject(reason); + off(); }); }); } diff --git a/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts b/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts index 7591b4e11..a899d4955 100644 --- a/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts +++ b/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts @@ -348,6 +348,8 @@ class CloudWorkspaceFlavourProvider implements WorkspaceFlavourProvider { await storage.connection.waitForConnected(); const localBlob = await storage.get(blob); + storage.connection.disconnect(); + if (localBlob) { return new Blob([localBlob.data], { type: localBlob.mime }); }