From 9af6202a7fe348f7d9e382a5460ecac5d1f05314 Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Thu, 10 Feb 2022 11:45:41 -0600 Subject: [PATCH] Fetch: parse JSON off-main-thread (async) based on response Content-Type (#45188) --- public/app/core/services/backend_srv.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/public/app/core/services/backend_srv.ts b/public/app/core/services/backend_srv.ts index f523fb19314..d26fcbd4905 100644 --- a/public/app/core/services/backend_srv.ts +++ b/public/app/core/services/backend_srv.ts @@ -20,7 +20,12 @@ import { getConfig } from 'app/core/config'; import { DashboardSearchHit } from 'app/features/search/types'; import { FolderDTO } from 'app/types'; import { ContextSrv, contextSrv } from './context_srv'; -import { parseInitFromOptions, parseResponseBody, parseUrlFromOptions } from '../utils/fetch'; +import { + isContentTypeApplicationJson, + parseInitFromOptions, + parseResponseBody, + parseUrlFromOptions, +} from '../utils/fetch'; import { isDataQuery, isLocalUrl } from '../utils/query'; import { FetchQueue } from './FetchQueue'; import { ResponseQueue } from './ResponseQueue'; @@ -187,7 +192,9 @@ export class BackendSrv implements BackendService { mergeMap(async (response) => { const { status, statusText, ok, headers, url, type, redirected } = response; - const data = await parseResponseBody(response, options.responseType); + const responseType = options.responseType ?? (isContentTypeApplicationJson(headers) ? 'json' : undefined); + + const data = await parseResponseBody(response, responseType); const fetchResponse: FetchResponse = { status, statusText,