@mcdevsl/mc-superset-ui
Version:
19 lines (16 loc) • 658 B
text/typescript
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);
}