web-dev-qa-db-fra.com

Que signifie cette erreur - Uncaught TypeError: déjà lu?

En Javascript, quand cette erreur est-elle renvoyée?

enter image description here

index.js

/**
 * Created by tushar.mathur on 24/12/15.
 */
'use strict'

const _ = require('lodash')
const Rx = require('rx')
const createDataStore = require('./src/createDataStore')

const fetch = x => Rx.Observable.fromPromise(window.fetch(x)) 
const parseJSON = x => Rx.Observable.fromPromise(x.json()) // Line: 11 (Where the exception is thrown)
var create = _.partial(createDataStore, fetch, parseJSON)
module.exports = {
  create,
  // Alias for legacy purposes
  createDataStore: create,
  createFetchStore: create
}

Est-ce une erreur de promesse native? Qu'est-ce que cela implique? Google ne montre aucun résultat trouvé.

41
tusharmath

Je pense que cela signifie que le corps a déjà été lu à l'aide de .json () .text () etc ... Lorsque vous exécutez x.json (), il prend le corps de la réponse et le lit en JSON. Si vous essayez d'exécuter à nouveau x.json (), cela vous donnera cette erreur. Vous ne pouvez donc utiliser qu'une seule fois ces méthodes . Je suppose donc que quelque part dans votre code, il lit à nouveau le corps de la même réponse en utilisant l’une des méthodes de Body.

Je pense que c'est pourquoi ils offrent le Body.bodyUsed méthode. Donc, vous pouvez voir si cela a déjà été lu.

63
gkkirsch

Cette erreur signifie que vous avez résolu la promesse (dans ce cas, vous utilisez Body.json()) plusieurs fois.

Vous pouvez vérifier les méthodes du corps de la réponse à partir de la référence que j'ai jointe ci-dessous et vous avez besoin d'un drapeau pour vérifier si la promesse a été résolue ou non: dans ce cas, vous pouvez utiliser Body.bodyUsed

Référence: https://developer.mozilla.org/en-US/docs/Web/API/Response

HTH

6
Winters