Comment gérer les erreurs JavaScript Fetch?
Si fetch l'appel échoue dans Chrome, alors les seuls détails d'erreur que je récupère sont
TypeError: échec de fetch
Comment puis-je afficher un message d'erreur informatif à l'utilisateur final dans ce cas?
plus Précisément:
est-il possible d'obtenir des détails sur la raison pour laquelle fetch a échoué?
par exemple, si le serveur s'est écrasé, Chrome DevTools pourrait enregistrer un message de net: ERR_EMPTY_RESPONSE, mais il semble qu'il n'y ait aucun moyen d'accéder à cela à partir de JavaScript.
autant que je puisse dire, la réponse est Non; Je suppose que c'est pour des raisons de sécurité, pour éviter de laisser des js malveillants découvrir quels sites sont et ne sont pas accessibles en inspectant les messages d'erreur.
Est-il possible de distinguer chercher les erreurs des autres TypeError
s?
si Je ne peux pas obtenir les détails d'erreur, je voudrais au moins remplacer l'horriblement vague " N'a pas réussi à fetch "with an informative" N'a pas accédé au site web; s'il vous plaît réessayez plus tard" message, et je voudrais le faire sans aucun risque d'afficher ce message pour les autres TypeError
S.
la seule solution que j'ai trouvée ici est de vérifier lemessage
pour voir si c'est "Failed to fetch"
. Cela est évidemment spécifique au navigateur; il fonctionne dans Chrome, il semble que cela fonctionnera dans n'importe quelle langue d'utilisateur de Chrome, et d'autres navigateurs auraient besoin de leur propre test et la manipulation.
1 réponses
il semble probable qu'il n'y ait pas plus de détails pour les problèmes de réseautage/permission/entrée.
est-il possible de distinguer les erreurs fetch des autres TypeErrors?
Oui, vous avez juste besoin d' catch
seulement les erreurs de fetch
appel:
fetch(…)
.catch(err => new FetchError(err))
.…
class FetchError extends Error {
constructor(orig) {
super();
this.message = "fetch error";
this.details = orig;
}
}