J'utilise le Fetch API pour charger du JSON. Par conséquent, j'utilise .json()
sur le flux de réponse et également l'argument optionnel deuxième fonction (onRejected
) dans .then()
, qui a un seul argument, le motif de rejet.Rejected Fetch Promise: accès au texte de réponse
Si quelque chose ne va pas (comme la réponse n'est pas un JSON valide), je veux accéder au texte de la réponse brute pour avoir un journal des erreurs significatif ou pour traiter la réponse inattendue.
Tenir compte cet extrait simplifié:
fetch('api.php')
.then(
response => { return response.json(); }
)
.then(
json => { /* useful fulfillment value, a JSON object */ },
reason => { /* string message only */ }
);
Si l'API répond par autre chose que valide JSON, il rejettera la raison suivante:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Bien que ce soit un message d'erreur parfaitement clair , il manque un vidage de ce qui en fait causé l'erreur.
J'ai envisagé d'utiliser .text()
puis d'essayer d'analyser le JSON moi-même, mais cela contreviendrait quelque peu à l'objectif de .json()
.
Existe-t-il un moyen raisonnable d'accéder au texte de la réponse si la lecture de flux est rejetée?
Ce serait une manière simple et sûre de s'assurer que la réponse arrive au traitement, mais il faudrait vérifier si l'argument * était * JSON. Je pourrais utiliser '.text()' tout de suite.La question était de savoir s'il y avait un moyen d'accéder à la réponse dans le rappel de rejet. – dakab
Qu'en est-il un try..catch comme ci-dessus? – cjds
L'avez vous essayé? Il appelle toujours la fonction de rejet, probablement parce qu'aucune réaffectation n'a lieu après la lecture du flux de réponse. – dakab