TypeError no detectado: response.json no es una función en HTMLButtonElement

Oct 10 2020

Estoy atascado con esto, soy nuevo en el desarrollo web, cualquier ayuda sería muy apreciada. No puedo averiguar qué está mal en mi código, obtengo un error Uncaught TypeError: response.json no es una función

const getButton = document.querySelector('.get')
function getData(){
  const response = fetch("https://reqres.in/api/users");
  const data = response.json();
  console.log(data)
}
 getButton.addEventListener('click',getData)
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        <button class="get">GET</button>
    </div>
    <script src="sandbox.js"></script>
</body>
</html>

Respuestas

1 User863 Oct 10 2020 at 15:58

Utilizando async/await

const getButton = document.querySelector('.get')

async function getData() {
  const response = await fetch("https://reqres.in/api/users");
  const data = await response.json();
  console.log(data)
}

getButton.addEventListener('click', getData)
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div>
    <button class="get">GET</button>
  </div>
  <script src="sandbox.js"></script>
</body>

</html>

Jamie Oct 10 2020 at 16:21

Como se mencionó, fetch () es asincrónico. Prueba esto:

const getButton = document.querySelector('.get')
function getData(){
    const response = fetch("https://reqres.in/api/users")
        .then(function(data) {
            // This will run on on response from the server
            // AAA
            console.log(data);
        })
        .catch(function(error) {
            // Deal with errors here
        });
    // BBB
}
getButton.addEventListener('click',getData);

por lo que el código en BBB probablemente se ejecutará antes que el código en AAA