Fetch: parse JSON off-main-thread (async) based on response Content-Type (#45188)

This commit is contained in:
Leon Sorokin 2022-02-10 11:45:41 -06:00 committed by GitHub
parent cb461d931f
commit 9af6202a7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,7 +20,12 @@ import { getConfig } from 'app/core/config';
import { DashboardSearchHit } from 'app/features/search/types'; import { DashboardSearchHit } from 'app/features/search/types';
import { FolderDTO } from 'app/types'; import { FolderDTO } from 'app/types';
import { ContextSrv, contextSrv } from './context_srv'; 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 { isDataQuery, isLocalUrl } from '../utils/query';
import { FetchQueue } from './FetchQueue'; import { FetchQueue } from './FetchQueue';
import { ResponseQueue } from './ResponseQueue'; import { ResponseQueue } from './ResponseQueue';
@ -187,7 +192,9 @@ export class BackendSrv implements BackendService {
mergeMap(async (response) => { mergeMap(async (response) => {
const { status, statusText, ok, headers, url, type, redirected } = response; const { status, statusText, ok, headers, url, type, redirected } = response;
const data = await parseResponseBody<T>(response, options.responseType); const responseType = options.responseType ?? (isContentTypeApplicationJson(headers) ? 'json' : undefined);
const data = await parseResponseBody<T>(response, responseType);
const fetchResponse: FetchResponse<T> = { const fetchResponse: FetchResponse<T> = {
status, status,
statusText, statusText,