J'ai une API synchrone pour appeler un serveur (HTTP GET) actuellement implémenté avec XMLHttpRequest.Interface HTTP synchrone avec javascript
L'API effectue une mise en cache et, si le cache n'est pas considéré comme trop ancien, revient du cache et appelle le serveur asynchrone pour actualiser le cache.
Parfois, le cache n'est pas disponible ou est trop ancien, puis l'API est synchrone et appelle le serveur pour extraire une valeur précise avant de renvoyer le résultat à l'appelant. Le résultat contiendra un indicateur de succès booléen avec la charge utile et le client gère le résultat en regardant ce drapeau.
Il y a deux problèmes que je peux voir en faisant comme ceci; Lorsque le cache n'est pas disponible et que le serveur n'est pas joignable ou répond lentement, je voudrais faire apparaître un spinner pour que l'utilisateur sache que nous attendons le serveur. En outre, je voudrais définir une valeur de délai d'attente où nous abandonnons la requête du serveur et gérons l'erreur en conséquence.
On dirait que je devrais pouvoir utiliser les opérations setTimout mais je n'ai pas réussi. De préférence je voudrais garder les clients intacts (ne pas changer l'API en asynchrone).
Existe-t-il un moyen d'y parvenir?
Synchronous AJAX est une très mauvaise idée. – plalx
Oui en effet, donc j'ai besoin de le changer. Vous avez une recommandation? Pour être clair, l'interface (mon code) doit être synchrone, mais l'implémentation doit être asynchrone, ou je vais redessiner les clients pour utiliser asynch. En regardant les options que j'ai. – daljian
La partie bloquante de "synchrone" est la mauvaise chose. La seule façon de changer cela est d'utiliser JAX asynchrone, ce qui conduit à une interface asynchrone. Redessiner les clients pour qu'ils soient asynchrones n'est pas non plus une mauvaise idée. – Bergi