diff --git a/core/base-service/legacy-request-handler.js b/core/base-service/legacy-request-handler.js index 78ee9ec98458e1ba2146e238ca4d4ec82a50f65a..30980f77083aae35b77352138ece79a8068d1ac6 100644 --- a/core/base-service/legacy-request-handler.js +++ b/core/base-service/legacy-request-handler.js @@ -63,6 +63,25 @@ function flattenQueryParams(queryParams) { return Array.from(union).sort() } +function promisify(cachingRequest) { + return (uri, options) => + new Promise((resolve, reject) => { + cachingRequest(uri, options, (err, res, buffer) => { + if (err) { + if (err instanceof ShieldsRuntimeError) { + reject(err) + } else { + // Wrap the error in an Inaccessible so it can be identified + // by the BaseService handler. + reject(new Inaccessible({ underlyingError: err })) + } + } else { + resolve({ res, buffer }) + } + }) + }) +} + // handlerOptions can contain: // - handler: The service's request handler function // - queryParams: An array of the field names of any custom query parameters @@ -231,24 +250,9 @@ function handleRequest(cacheHeaderConfig, handlerOptions) { }) } - // Wrapper around `cachingRequest` that returns a promise rather than - // needing to pass a callback. - cachingRequest.asPromise = (uri, options) => - new Promise((resolve, reject) => { - cachingRequest(uri, options, (err, res, buffer) => { - if (err) { - if (err instanceof ShieldsRuntimeError) { - reject(err) - } else { - // Wrap the error in an Inaccessible so it can be identified - // by the BaseService handler. - reject(new Inaccessible({ underlyingError: err })) - } - } else { - resolve({ res, buffer }) - } - }) - }) + // Wrapper around `cachingRequest` that returns a promise rather than needing + // to pass a callback. + cachingRequest.asPromise = promisify(cachingRequest) vendorDomain.run(() => { const result = handlerOptions.handler( @@ -304,6 +308,7 @@ function clearRequestCache() { module.exports = { handleRequest, + promisify, clearRequestCache, // Expose for testing. _requestCache: requestCache,