2017-10-20 20 views
3

Je suis confronté à un problème dans React fetch, il me donne une réponse incomplète, donc quand j'analyse la réponse en JSON, il me renvoyait une erreur.React fetch me donne une réponse JSON tronquée

code:

export default async (url, body = null, method = 'GET') => { 
    let config = { 
     method, 
    }; 
    try { 
     const response = await fetch(url, config); 
     if (!response.ok) { 
      throw new Error(response.statusText); 
     } 
     return await response.json(); 
    } catch (error) { 
     console.warn(error); 
     throw error; 
    } 
}; 

journal de réponse: Response log

Est a une taille d'extraction de réponse maximale? Si oui, comment l'augmenter?

Répondre

4

Il n'y a pas de limite maximum pour récupérer la taille de la réponse.

L'erreur dans votre cas signifie que vous lisez le corps de la réponse plusieurs fois. Essayez de protéger les appels .json() avec Body.bodyUsed.

Voir https://developer.mozilla.org/en-US/docs/Web/API/Body

+0

Il est une fonction async il sera appelé plus d'une fois, est-ce pas? Vous voulez dire, je dois valider si 'bodyUsed' était vrai ou pas sur l'appel' .json() '? –

+0

@JustinusHermawan Voir [Relire un corps de réponse de fetch de JavaScript] (https://stackoverflow.com/questions/40497859/reread-a-response-body-from-javascripts-fetch/), [Comment télécharger Json en utilisant Fetch en JavaScript?] (https://stackoverflow.com/questions/46797810/how-do-download-of-json-using-fetch-in-javascript/) – guest271314

+0

@ guest271314 Je n'ai aucun problème avec 'TypeErrror: déjà lu », c'est juste parce que je débogue avec' response.text() ', je l'ignore. Mon problème était dans la réponse JSON tronquée comme je l'ai vu dans le journal 'response.text()'. –