diff --git a/src/vs/base/parts/tree/browser/treeModel.ts b/src/vs/base/parts/tree/browser/treeModel.ts index 38abf8eca456faf80f8d46d7809724f48f82a14b..d69b0d2bc98d884b1397659a9e0784d633224255 100644 --- a/src/vs/base/parts/tree/browser/treeModel.ts +++ b/src/vs/base/parts/tree/browser/treeModel.ts @@ -453,7 +453,13 @@ export class Item { private refreshChildren(recursive: boolean, safe: boolean = false, force: boolean = false): WinJS.Promise { if (!force && !this.isExpanded()) { - this.needsChildrenRefresh = true; + const setNeedsChildrenRefresh = (item: Item) => { + item.needsChildrenRefresh = true; + item.forEachChild(setNeedsChildrenRefresh); + }; + + setNeedsChildrenRefresh(this); + return WinJS.TPromise.as(this); } @@ -511,8 +517,14 @@ export class Item { return child.doRefresh(recursive, true); })); } else { - this.mapEachChild(child => child.updateVisibility()); - return WinJS.TPromise.as(null); + return WinJS.Promise.join(this.mapEachChild((child) => { + if (child.needsChildrenRefresh) { + return child.doRefresh(recursive, true); + } else { + child.updateVisibility(); + return WinJS.TPromise.as(null); + } + })); } });