J'enregistre les erreurs du client JS à l'aide de Sentry et il y a beaucoup de TypeError: cancelled
les erreurs. Cela se produit uniquement sur iOS. Je ne trouve rien sur Google. Est-ce une erreur Javascript native ou autre chose? Qu'est-ce que ça veut dire?
Je reçois également des erreurs similaires dans d'autres langues, telles que 취소됨
, Abgebrochen
et cancelado
. Cela me dit que l'erreur n'est pas déclenchée par mon code.
Si vous utilisez l'API fetch
, cela pourrait être un problème avec AbortController
et AbortSignal
dans iOS 11.1-12, qui ne se déclencherait que lorsque quelqu'un tenterait d'interrompre une extraction (ce qui explique pourquoi cela n'affecterait pas nécessairement tous les utilisateurs iOS, expliquant l'incohérence).
Pour élaborer, iOS 11.1-12 définit AbortController
et AbortSignal
dans le DOM, mais ce sont des talons - voir ici . Donc, si vous essayez d'interrompre une demande de récupération dans iOS en <= 12, la demande ne sera pas abandonnée et générera probablement une sorte d'erreur.
Étant donné qu'il s'agit d'un TypeError
plutôt que d'un AbortError
, il semble probable que le problème vient du fait que le AbortController
n'est pas correctement/entièrement défini.
EDIT: Une lecture plus approfondie semble également indiquer que les erreurs fetches
dans iOS jettent TypeError
erreurs, même pour des choses comme bloquées extractions. Comme mentionné ci-dessus, le problème pourrait être avec tous les bloqueurs de publicités installés (par exemple, sur un iPhone jailbreaké) ou un problème CORS
, et iOS lancerait alors TypeError
- Webkit BugZilla discussion . En tant que tel, se concentrer sur le type d'erreur peut vous conduire sur le mauvais chemin.
Frustrant non?
Récemment, notre équipe a rencontré cette même erreur. Voici ce qui se passait dans notre cas. Lorsque la page se charge, le bouton d'actualisation se transforme en bouton croisé, maintenant si une demande d'api est en cours pendant ce temps de chargement de la page et que l'utilisateur clique sur ce bouton croisé, alors iOS chrome/safari renvoie cette erreur. Pour la même situation, le navigateur Firefox lance TypeError: NetworkError when attempting to fetch resource
et chrome navigateur via TypeError: Failed to fetch
.
Ce n'est pas vraiment un problème qui devrait nous inquiéter, et nous avons donc décidé de faire ignorer cette erreur à sentinelle en utilisant l'attribut ignoreErrors de sentinelle.
Sentry.init({
dsn: "sentry_dsn",
ignoreErrors: [
'TypeError: Failed to fetch',
'TypeError: NetworkError when attempting to fetch resource.',
'TypeError: Cancelled'
],
});
Remarque:
Échec de la récupération est également généré par des erreurs CORS, veuillez également en tenir compte. Nous avons également décidé d'ignorer les erreurs avec statusCode entre 400 et 426 en utilisant le rappel beforeSend de sentinelle.
Nous avons passé des jours à essayer de trouver cette erreur. J'espère que cela aide quelqu'un.
Je vous remercie
En outre, cela a été initialement écrit ici: https://forum.sentry.io/t/typeerror-failed-to-fetch-reported-over-and-overe/8447/2