Reintent i retrocés exponencial amb promeses

Bloc

Reintent i retrocés exponencial amb promeses

Quan no teniu una interfície per saber quan hi ha disponible un recurs remot, una opció a tenir en compte és fer servir un retrocés exponencial en lloc d’interrogar aquest recurs fins obtenir una resposta.

Configura

En aquest escenari, imitem el comportament d’un navegador i d’un servidor. Suposem que el servidor té una taxa de fracàs abismal del 80%.

const randomlyFail = (resolve, reject) => Math.random() new Promise((...args) => setTimeout(() => randomlyFail(...args), 1000));

El apiCall La funció imita el comportament de trucar a un punt final en un servidor.

S’intenta tornar-ho a provar

Quan el apiCall s'ha rebutjat, getResource es torna a cridar immediatament.

const getResource = () => apiCall().catch(getResource);

Amb un retard

Si un servidor ja falla, pot ser que no sigui aconsellable desbordar-lo de sol·licituds. Afegir un retard al sistema pot ser una solució provisional al problema. Si és possible, seria millor investigar la causa de la fallada del servidor.

const delay = () => new Promise(resolve => setTimeout(resolve, 1000)); const getResource = () => apiCall().catch(() => delay().then(() => getResource()));

#javascript # exponential-backoff # asynchronous-programming #retry #promises #programming

medium.com

Reintent i retrocés exponencial amb promeses

Quan no teniu una interfície per saber quan hi ha disponible un recurs remot, una opció a tenir en compte és fer servir un retrocés exponencial en lloc d’interrogar aquest recurs fins obtenir una resposta. En aquest escenari, imitem el comportament d’un navegador i d’un servidor. Suposem que el servidor té una taxa de fracàs abismal del 80%.