2017-08-04 2 views
3

Je suis en train d'attraper un tas d'erreurs liées à la même politique d'origine lorsque vous utilisez l'Fetch API, mais sans aucun succès:Attraper « Impossible de charger la ressource » lorsque vous utilisez l'Fetch API

window.onerror = (message, file, line, col, error) => console.log(error) 
window.addEventListener('error', (error) => console.log(error)) 

try { 
    fetch('https://www.bitstamp.net/api/ticker/').catch(e => { 
     console.log('Caugth error:') 
     console.log(e) 
     console.log(JSON.stringify(e)) 
    }) 
} 
catch (e) { 
    console.log('try-catch') 
    console.log(e) 
} 

Les erreurs Je veux attraper apparaître que dans la console Web:

error messages

Voir un exemple de code ici: https://github.com/nyg/fetch-error-test

Comment puis-je détecter ces erreurs pour fournir un message à l'écran?

EDIT: Le bloc catch de fetch est réellement exécuté.

fetch('https://www.bitstamp.net/api/ticker/') 
 
    .then(response => response.text()) 
 
    .then(pre) 
 
    .catch(e => { 
 
     pre(`Caugth error: ${e.message}`) 
 
    }) 
 

 
function pre(text) { 
 
    var pre = document.createElement('pre') 
 
    document.body.insertAdjacentElement('afterbegin', pre) 
 
    pre.insertAdjacentText('beforeend', text) 
 
}
pre { 
 
    border: 1px solid black; 
 
    margin: 20px; 
 
    padding: 20px; 
 
}

Répondre

2

Pour autant que je me rappelle, vous ne pouvez pas catch exceptions conduit navigateur dans votre typique try->catch ou un catch chain intérieur de fetch.

exceptions CORS sont jetés avec l'intention, d'avoir l'utilisateur naviguant sur le site, connaître de telles anomalies si vous pouvez les appeler, et de protéger toute fuite d'information sécurisée possible sur le appelé api/serveur

Lire here d'une discussion SO précédente si vous pourriez attraper ces erreurs avec un gestionnaire d'exception

Si la requête renvoie une erreur qui peut faire partie de la réponse, comme une erreur d'état et tel, alors vous pouvez l'attraper et de montrer un message personnalisé

+0

On dirait que vous avez raison :). Merci pour le lien, j'avais échoué à trouver cette discussion ... Cependant, même si je ne peux pas attraper ces erreurs, le bloc catch de fetch est en fait exécuté (j'ai probablement eu un problème avec mon code). Le message d'erreur est simplement 'Tapez error' sur Safari,' Failed to fetch' sur Chrome et 'NetworkError lors de la tentative de récupération de ressources .' sur Firefox. J'ai modifié ma réponse avec un extrait de code. – nyg