mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 01:47:00 +01:00
Convert shared/modules/fetch-with-timeout to TS (#18351)
We want to convert NetworkController to TypeScript in order to be able to compare differences in the controller between in this repo and the core repo. To do this, however, we need to convert the dependencies of the controller to TypeScript. As a part of this effort, this commit converts `shared/modules/fetch-with-timeout.js` to TypeScript.
This commit is contained in:
parent
74b9ab28f3
commit
bbfc455342
@ -1,12 +1,25 @@
|
|||||||
import { memoize } from 'lodash';
|
import { memoize } from 'lodash';
|
||||||
import { SECOND } from '../constants/time';
|
import { SECOND } from '../constants/time';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a function that can be used to make an HTTP request but timing out
|
||||||
|
* automatically after a desired amount of time.
|
||||||
|
*
|
||||||
|
* @param timeout - The number of milliseconds to wait until the request times
|
||||||
|
* out.
|
||||||
|
* @returns A function that, when called, returns a promise that either resolves
|
||||||
|
* to the HTTP response object or is rejected if a network error is encountered
|
||||||
|
* or the request times out.
|
||||||
|
*/
|
||||||
const getFetchWithTimeout = memoize((timeout = SECOND * 30) => {
|
const getFetchWithTimeout = memoize((timeout = SECOND * 30) => {
|
||||||
if (!Number.isInteger(timeout) || timeout < 1) {
|
if (!Number.isInteger(timeout) || timeout < 1) {
|
||||||
throw new Error('Must specify positive integer timeout.');
|
throw new Error('Must specify positive integer timeout.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return async function _fetch(url, opts) {
|
return async function fetchWithTimeout(
|
||||||
|
url: RequestInfo,
|
||||||
|
opts?: RequestInit,
|
||||||
|
): Promise<Response> {
|
||||||
const abortController = new window.AbortController();
|
const abortController = new window.AbortController();
|
||||||
const { signal } = abortController;
|
const { signal } = abortController;
|
||||||
const f = window.fetch(url, {
|
const f = window.fetch(url, {
|
||||||
@ -17,12 +30,9 @@ const getFetchWithTimeout = memoize((timeout = SECOND * 30) => {
|
|||||||
const timer = setTimeout(() => abortController.abort(), timeout);
|
const timer = setTimeout(() => abortController.abort(), timeout);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await f;
|
return await f;
|
||||||
|
} finally {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
return res;
|
|
||||||
} catch (e) {
|
|
||||||
clearTimeout(timer);
|
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
Loading…
Reference in New Issue
Block a user