diff --git a/packages/apputils/src/instancetracker.ts b/packages/apputils/src/instancetracker.ts index 70092b610bda..0a94343fac55 100644 --- a/packages/apputils/src/instancetracker.ts +++ b/packages/apputils/src/instancetracker.ts @@ -339,6 +339,10 @@ export class InstanceTracker * respective widgets. */ async restore(options: InstanceTracker.IRestoreOptions): Promise { + if (this._hasRestored) { + throw Error('Instance tracker has already restored'); + } + this._hasRestored = true; const { command, registry, state, when } = options; const namespace = this.namespace; const promises = when @@ -348,7 +352,7 @@ export class InstanceTracker this._restore = options; const [saved] = await Promise.all(promises); - const val = await Promise.all( + const values = await Promise.all( saved.ids.map((id, index) => { const value = saved.values[index]; const args = value && (value as any).data; @@ -360,8 +364,8 @@ export class InstanceTracker return registry.execute(command, args).catch(() => state.remove(id)); }) ); - this._restored.resolve(void 0); - return val; + this._restored.resolve(undefined); + return values; } /** @@ -468,6 +472,7 @@ export class InstanceTracker } } + private _hasRestored = false; private _restore: InstanceTracker.IRestoreOptions | null = null; private _restored = new PromiseDelegate(); private _tracker = new FocusTracker();