diff --git a/public/app/plugins/datasource/logging/components/LoggingQueryField.tsx b/public/app/plugins/datasource/logging/components/LoggingQueryField.tsx index 82ebc444c62..ce79d38f9a8 100644 --- a/public/app/plugins/datasource/logging/components/LoggingQueryField.tsx +++ b/public/app/plugins/datasource/logging/components/LoggingQueryField.tsx @@ -95,9 +95,9 @@ class LoggingQueryField extends React.PureComponent { - remaining.map(task => task.then(this.onReceiveMetrics).catch(() => {})); + remaining.map(task => task.then(this.onUpdateLanguage).catch(() => {})); }) - .then(() => this.onReceiveMetrics()); + .then(() => this.onUpdateLanguage()); } } @@ -119,7 +119,7 @@ class LoggingQueryField extends React.PureComponent {}); }; @@ -147,7 +147,7 @@ class LoggingQueryField extends React.PureComponent { + onUpdateLanguage = () => { Prism.languages[PRISM_SYNTAX] = this.languageProvider.getSyntax(); const { logLabelOptions } = this.languageProvider; this.setState({ diff --git a/public/app/plugins/datasource/logging/language_provider.ts b/public/app/plugins/datasource/logging/language_provider.ts index 32f4f8a0cd7..0896168ca56 100644 --- a/public/app/plugins/datasource/logging/language_provider.ts +++ b/public/app/plugins/datasource/logging/language_provider.ts @@ -47,7 +47,6 @@ export default class LoggingLanguageProvider extends LanguageProvider { this.datasource = datasource; this.labelKeys = {}; this.labelValues = {}; - this.started = false; Object.assign(this, initialValues); } @@ -63,11 +62,10 @@ export default class LoggingLanguageProvider extends LanguageProvider { }; start = () => { - if (!this.started) { - this.started = true; - return this.fetchLogLabels(); + if (!this.startTask) { + this.startTask = this.fetchLogLabels(); } - return Promise.resolve([]); + return this.startTask; }; // Keep this DOM-free for testing diff --git a/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx b/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx index 649b17ad8cf..a7787096d85 100644 --- a/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx @@ -134,9 +134,9 @@ class PromQueryField extends React.PureComponent { - remaining.map(task => task.then(this.onReceiveMetrics).catch(() => {})); + remaining.map(task => task.then(this.onUpdateLanguage).catch(() => {})); }) - .then(() => this.onReceiveMetrics()); + .then(() => this.onUpdateLanguage()); } } @@ -176,7 +176,7 @@ class PromQueryField extends React.PureComponent { + onUpdateLanguage = () => { const { histogramMetrics, metrics } = this.languageProvider; if (!metrics) { return; diff --git a/public/app/plugins/datasource/prometheus/language_provider.ts b/public/app/plugins/datasource/prometheus/language_provider.ts index 5f97ebfa7b5..23c25885041 100644 --- a/public/app/plugins/datasource/prometheus/language_provider.ts +++ b/public/app/plugins/datasource/prometheus/language_provider.ts @@ -46,7 +46,7 @@ export default class PromQlLanguageProvider extends LanguageProvider { labelKeys?: { [index: string]: string[] }; // metric -> [labelKey,...] labelValues?: { [index: string]: { [index: string]: string[] } }; // metric -> labelKey -> [labelValue,...] metrics?: string[]; - started: boolean; + startTask: Promise; constructor(datasource: any, initialValues?: any) { super(); @@ -56,7 +56,6 @@ export default class PromQlLanguageProvider extends LanguageProvider { this.labelKeys = {}; this.labelValues = {}; this.metrics = []; - this.started = false; Object.assign(this, initialValues); } @@ -72,11 +71,10 @@ export default class PromQlLanguageProvider extends LanguageProvider { }; start = () => { - if (!this.started) { - this.started = true; - return this.fetchMetricNames().then(() => [this.fetchHistogramMetrics()]); + if (!this.startTask) { + this.startTask = this.fetchMetricNames().then(() => [this.fetchHistogramMetrics()]); } - return Promise.resolve([]); + return this.startTask; }; // Keep this DOM-free for testing diff --git a/public/app/types/explore.ts b/public/app/types/explore.ts index a96d6c084fb..5a9db7e9b53 100644 --- a/public/app/types/explore.ts +++ b/public/app/types/explore.ts @@ -86,10 +86,11 @@ export abstract class LanguageProvider { datasource: any; request: (url) => Promise; /** - * Returns a promise that resolves with a task list when main syntax is loaded. + * Returns startTask that resolves with a task list when main syntax is loaded. * Task list consists of secondary promises that load more detailed language features. */ start: () => Promise; + startTask?: Promise; } export interface TypeaheadInput {