diff --git a/modules/carto/src/api/request-with-parameters.ts b/modules/carto/src/api/request-with-parameters.ts index b73eb0f89d0..6301586a3b6 100644 --- a/modules/carto/src/api/request-with-parameters.ts +++ b/modules/carto/src/api/request-with-parameters.ts @@ -22,44 +22,38 @@ export async function requestWithParameters({ errorContext: APIErrorContext; }): Promise { const key = createCacheKey(baseUrl, parameters || {}, customHeaders || {}); + if (REQUEST_CACHE.has(key)) { + return REQUEST_CACHE.get(key) as Promise; + } - if (!REQUEST_CACHE.has(key)) { - const url = parameters ? createURLWithParameters(baseUrl, parameters) : baseUrl; - const headers = {...DEFAULT_HEADERS, ...customHeaders}; - - /* global fetch */ - const fetchPromise = - url.length > MAX_GET_LENGTH - ? fetch(baseUrl, {method: 'POST', body: JSON.stringify(parameters), headers}) - : fetch(url, {headers}); + const url = parameters ? createURLWithParameters(baseUrl, parameters) : baseUrl; + const headers = {...DEFAULT_HEADERS, ...customHeaders}; - let response: Response | undefined; - const jsonPromise: Promise = fetchPromise - .then((_response: Response) => { - response = _response; - return response.json(); - }) - .then((json: any) => { - if (!response || !response.ok) { - throw new Error(json.error); - } - return json; - }) - .catch((error: Error) => { - REQUEST_CACHE.delete(key); - throw new CartoAPIError(error, errorContext, response); - }); + /* global fetch */ + const fetchPromise = + url.length > MAX_GET_LENGTH + ? fetch(baseUrl, {method: 'POST', body: JSON.stringify(parameters), headers}) + : fetch(url, {headers}); - REQUEST_CACHE.set(key, jsonPromise); - } + let response: Response | undefined; + const jsonPromise: Promise = fetchPromise + .then((_response: Response) => { + response = _response; + return response.json(); + }) + .then((json: any) => { + if (!response || !response.ok) { + throw new Error(json.error); + } + return json; + }) + .catch((error: Error) => { + REQUEST_CACHE.delete(key); + throw new CartoAPIError(error, errorContext, response); + }); - // Cached requests do not share access tokens and error context. - return (REQUEST_CACHE.get(key) as Promise).catch((error: Error) => { - if (error instanceof CartoAPIError) { - throw new CartoAPIError(error.error, errorContext, error.response); - } - throw new CartoAPIError(error, errorContext); - }); + REQUEST_CACHE.set(key, jsonPromise); + return jsonPromise; } function createCacheKey(