diff --git a/src/sql/workbench/browser/parts/views/customView.ts b/src/sql/workbench/browser/parts/views/customView.ts index 94b3ccbb9f..dbf8a95a09 100644 --- a/src/sql/workbench/browser/parts/views/customView.ts +++ b/src/sql/workbench/browser/parts/views/customView.ts @@ -698,26 +698,28 @@ class TreeDataSource implements IAsyncDataSource { return this.treeView.dataProvider && node.collapsibleState !== TreeItemCollapsibleState.None; } - getChildren(node: ITreeItem): Promise { + async getChildren(node: ITreeItem): Promise { if (node.childProvider) { - return this.withProgress(this.objectExplorerService.getChildren(node, this.id)).catch(e => { + try { + return await this.withProgress(this.objectExplorerService.getChildren(node, this.id)); + } catch (err) { // if some error is caused we assume something tangently happened // i.e the user could retry if they wanted. // So in order to enable this we need to tell the tree to refresh this node so it will ask us for the data again setTimeout(() => { this.treeView.collapse(node); - if (e instanceof UserCancelledConnectionError) { + if (err instanceof UserCancelledConnectionError) { return; } this.treeView.refresh([node]); }); return []; - }); + } } if (this.treeView.dataProvider) { - return this.withProgress(this.treeView.dataProvider.getChildren(node)); + return await this.withProgress(this.treeView.dataProvider.getChildren(node)); } - return Promise.resolve([]); + return []; } } diff --git a/src/sql/workbench/services/objectExplorer/browser/objectExplorerViewTreeShim.ts b/src/sql/workbench/services/objectExplorer/browser/objectExplorerViewTreeShim.ts index 31cfdef77f..096ea0e842 100644 --- a/src/sql/workbench/services/objectExplorer/browser/objectExplorerViewTreeShim.ts +++ b/src/sql/workbench/services/objectExplorer/browser/objectExplorerViewTreeShim.ts @@ -130,19 +130,19 @@ export class OEShimService extends Disposable implements IOEShimService { public async getChildren(node: ITreeItem, viewId: string): Promise { if (node.payload) { - let sessionId = await this.getOrCreateSession(viewId, node); - let requestHandle = this.nodeHandleMap.get(generateNodeMapKey(viewId, node)) || node.handle; - let treeNode = new TreeNode(undefined, undefined, undefined, requestHandle, undefined, undefined, undefined, undefined, undefined, undefined); + const sessionId = await this.getOrCreateSession(viewId, node); + const requestHandle = this.nodeHandleMap.get(generateNodeMapKey(viewId, node)) || node.handle; + const treeNode = new TreeNode(undefined, undefined, undefined, requestHandle, undefined, undefined, undefined, undefined, undefined, undefined); treeNode.connection = new ConnectionProfile(this.capabilities, node.payload); - return this.oe.resolveTreeNodeChildren({ + const childrenNodes = await this.oe.refreshTreeNode({ success: undefined, sessionId, rootNode: undefined, errorMessage: undefined - }, treeNode).then(e => e.map(n => this.treeNodeToITreeItem(viewId, n, node))); - } else { - return Promise.resolve([]); + }, treeNode); + return childrenNodes.map(n => this.treeNodeToITreeItem(viewId, n, node)); } + return []; } private treeNodeToITreeItem(viewId: string, node: TreeNode, parentNode: ITreeItem): ITreeItem {