wretch package starting from wretch v2.0.0npm i wretch-middlewares<!-- Global variable name : window.wretchMiddlewares -->
<script src="https://unpkg.com/wretch-middlewares"></script>| Dedupe | Retry | Throttling cache | Delay |
|---|
Prevents having multiple identical requests on the fly at the same time.
(url, opts) => booleanIf skip returns true, then the dedupe check is skipped.
(url, opts) => stringReturns a key that is used to identify the request.
(response: Response) => ResponseThis function is called when resolving the fetch response from duplicate calls. By default it clones the response to allow reading the body from multiple sources.
import wretch from 'wretch'
import { dedupe } from 'wretch-middlewares'
wretch().middlewares([
dedupe({
/* Options - defaults below */
skip: (url, opts) => opts.skipDedupe || opts.method !== 'GET',
key: (url, opts) => opts.method + '@' + url,
resolver: response => response.clone()
})
])./* ... */Retries a request multiple times in case of an error (or until a custom condition is true).
millisecondsThe timer between each attempt.
(delay, nbOfAttempts) => millisecondsThe custom function that is used to calculate the actual delay based on the the timer & the number of attemps.
numberThe maximum number of retries before resolving the promise with the last error. Specifying 0 means infinite retries.
(fetchResponse, error) => boolean | Promise<boolean>The request will be retried until that condition is satisfied.
({ response, error, url, options }) => { url?, options? } || Promise<{url?, options?}>Callback that will get executed before retrying the request. If this function returns an object having url and/or options properties, they will override existing values in the retried request. If it returns a Promise, it will be awaited before retrying the request.
booleanIf true, will retry the request if a network error was thrown. Will also provide an 'error' argument to the onRetry and until methods.
(response: Response) => ResponseThis function is called when resolving the fetch response from duplicate calls. By default it clones the response to allow reading the body from multiple sources.
import wretch from 'wretch'
import { retry } from 'wretch-middlewares'
wretch().middlewares([
retry({
/* Options - defaults below */
delayTimer: 500,
delayRamp: (delay, nbOfAttempts) => delay * nbOfAttempts,
maxAttempts: 10,
until: (response, error) => response && response.ok,
onRetry: null,
retryOnNetworkError: false,
resolver: response => response.clone()
})
])./* ... */
// You can also return a Promise, which is useful if you want to inspect the body:
wretch().middlewares([
retry({
until: response =>
response.json().then(body =>
body.field === 'something'
)
})
])A throttling cache which stores and serves server responses for a certain amount of time.
millisecondsThe response will be stored for this amount of time before being deleted from the cache.
(url, opts) => booleanIf skip returns true, then the dedupe check is skipped.
(url, opts) => stringReturns a key that is used to identify the request.
(url, opts) => booleanClears the cache if true.
(url, opts) => string | RegExp | Array<string | RegExp> | nullRemoves url(s) matching the string or RegExp from the cache. Can use an array to invalidate multiple values.
response => booleanIf false then the response will not be added to the cache.
stringIf set, a Response returned from the cache whill be flagged with a property name equal to this option.
import wretch from 'wretch'
import { throttlingCache } from 'wretch-middlewares'
wretch().middlewares([
throttlingCache({
/* Options - defaults below */
throttle: 1000,
skip: (url, opts) => opts.skipCache || opts.method !== 'GET',
key: (url, opts) => opts.method + '@' + url,
clear: (url, opts) => false,
invalidate: (url, opts) => null,
condition: response => response.ok,
flagResponseOnCacheHit: '__cached'
})
])./* ... */Delays the request by a specific amount of time.
millisecondsThe request will be delayed by that amount of time.
import wretch from 'wretch'
import { delay } from 'wretch-middlewares'
wretch().middlewares([
delay(1000)
])./* ... */