commit 12bf76239e6ed3110c883cf765dca7cf681192b7 Author: Ole Date: Fri Oct 9 17:09:01 2020 +0200 Refactor reload 2: Await render promise This function is very hard to follow. Making small steps to ensure careful review. Use await to move this code block left. Change-Id: Ifbb29be1936c77100624dc7bdc67b610c1ba32ee diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts index b573305..d683129 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts @@ -375,39 +375,38 @@ export class GrDiffHost extends GestureEventListeners( // Not waiting for coverage ranges intentionally as // plugin loading should not block the content rendering return Promise.all([diffRequest, assetRequest]) - .then(results => { + .then(async results => { const diff = results[0]; if (!diff) { return Promise.resolve(); } this.filesWeblinks = this._getFilesWeblinks(diff); this.diff = diff; - return new Promise(resolve => { + const event = await new Promise(resolve => { const callback = (event: CustomEvent) => { this.removeEventListener('render', callback); resolve(event); }; this.addEventListener('render', callback); - }).then((event: CustomEvent) => { - const needsSyntaxHighlighting = - event.detail && event.detail.contentRendered; - let result: Promise = Promise.resolve(); - if (needsSyntaxHighlighting) { - this.reporting.time(TimingLabel.SYNTAX); - result = this.$.syntaxLayer.process().finally(() => { - this.reporting.timeEnd(TimingLabel.SYNTAX); - }); - } - result.finally(() => { - this.reporting.timeEnd(TimingLabel.TOTAL); + }); + const needsSyntaxHighlighting = + event.detail && event.detail.contentRendered; + let result: Promise = Promise.resolve(); + if (needsSyntaxHighlighting) { + this.reporting.time(TimingLabel.SYNTAX); + result = this.$.syntaxLayer.process().finally(() => { + this.reporting.timeEnd(TimingLabel.SYNTAX); }); - if (shouldReportMetric) { - // We report diffViewContentDisplayed only on reload caused - // by params changed - expected only on Diff Page. - this.reporting.diffViewContentDisplayed(); - } - return result; + } + result.finally(() => { + this.reporting.timeEnd(TimingLabel.TOTAL); }); + if (shouldReportMetric) { + // We report diffViewContentDisplayed only on reload caused + // by params changed - expected only on Diff Page. + this.reporting.diffViewContentDisplayed(); + } + return result; }) .catch(err => { console.warn('Error encountered loading diff:', err);