From 843c1c71d9406e682748960fb413e311fa208601 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 10 Feb 2022 18:57:26 +0100 Subject: [PATCH] Fetch: parse JSON off-main-thread (async) based on response Content-Type (#45188) (#45257) (cherry picked from commit 9af6202a7fe348f7d9e382a5460ecac5d1f05314) Co-authored-by: Leon Sorokin --- 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,