blob: 76a161a0f62f499fbe0bbd79592b6b406e8ac37a [file] [log] [blame]
import callApi from './callApi';
import rejectAfterTimeout from './rejectAfterTimeout';
import parseResponse from './parseResponse';
import { CallApi, ClientTimeout, ParseMethod } from '../types';
export default async function callApiAndParseWithTimeout<T extends ParseMethod = 'json'>({
timeout,
parseMethod,
...rest
}: { timeout?: ClientTimeout; parseMethod?: T } & CallApi) {
const apiPromise = callApi(rest);
const racedPromise =
typeof timeout === 'number' && timeout > 0
? Promise.race([apiPromise, rejectAfterTimeout<Response>(timeout)])
: apiPromise;
return parseResponse(racedPromise, parseMethod);
}