Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

Error then its not a funtion

Vengo con la duda de esto llevo un rato con ello, ya vi el video una y otra ves, y haciéndolo paso a paso, me da el error, no se si tengo algo ,mal o que suceda, anexo las imagines y el código, espero puedan ayudarme gracias. Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadY aquí el client controller.js y el client service. `import { clientServices } from "../service/client-service.js";

//backticks export const crearNuevaLinea = (nombre, email,id) => { console.log(id); const linea = document.createElement("tr"); const contenido = <td class="td" data-td> ${nombre} </td> <td>${email}</td> <td> <ul class="table__button-control"> <li> <a href="../screens/editar_cliente.html" class="simple-button simple-button--edit" > Editar </a> </li> <li> <button class="simple-button simple-button--delete" type="button" id='${id}'> Eliminar </button> </li> </ul> </td>; linea.innerHTML = contenido; const btn = linea.querySelector("button"); btn.addEventListener("click",() => { const id = btn.id; clientServices .eliminarCliente(id) .then((respuesta) => { console.log(respuesta); }) .catch((err) => alert('Ocurrió un error')); }); return linea; };

const table = document.querySelector("[data-table]");

clientServices .listaClientes() .then((data) => { data.forEach(({nombre, email, id}) => { const nuevaLinea = crearNuevaLinea(nombre,email,id); table.appendChild(nuevaLinea); }); }) .catch((error) => alert("Ocurrió un error"));


```const listaClientes = () => 
fetch("http://localhost:3000/perfil").then(respuesta => respuesta.json());

const crearCliente = (nombre, email) => {
  return fetch("http://localhost:3000/perfil", {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({nombre,email, id: uuid.v4()}),
  });
};

const eliminarCliente = (id) => {
  console.log ('Eliminar a ->', id);
  return fetch(`http://localhost:3000/perfil/${id}`, {
    method: "DELETE",
  });
}

export const clientServices = {
  listaClientes,
  crearCliente,
  eliminarCliente,
};
3 respuestas

Hola Hugo, espero que estés bien.

Es algo difícil poder ayudarlo sin tener una visión completa de tu código. Este error es causado porque el valor retornado en tus variables no está siendo una promise. Para averiguar puedes hacer un console.log(); en estas variables. En caso de que no encuentres solución te pediré que comparta todo su código que tenga que ver con este problema de forma organizada, para que podamos intentar ayudarlo.

Si tienes alguna duda, no dejes de preguntar. ¡Estamos aquí para ayudarte!.

¡Saludos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios
solución!

Hola! Antes de más nada observé algunos errores en tu codigo:

  1. En la variable contenido necesitas usar el Acento grave para crear el contenido de tu innerHTML. Quedará de esta forma:
    const contenido = `
     <td class="td" data-td>
       ${nombre}
     </td>
     <td>${email}</td>
     <td>
       <ul class="table__button-control">
         <li>
           <a
             href="../screens/editar_cliente.html?id=${id}"
             class="simple-button simple-button--edit"
           >
             Editar
           </a>
         </li>
         <li>
           <button class="simple-button simple-button--delete" type="button" id="${id}">
             Eliminar
           </button>
         </li>
       </ul>
     </td>
    `;
    El TypeError es un error estándar de JavaScript cuando se intenta llamar a una función antes de que se defina. Este error ocurre si intenta ejecutar una función que no está inicializada o no está inicializada correctamente.

Esto significa que la expresión no devolvió un objeto fuction.

El está indicando que tu error esta en esta línea de código:

btn.addEventListener("click", () => { 
    const id = btn.id; 
    clientServices
        .eliminarCliente(id)
        .then((respuesta) => {
            console.log(respuesta); 
        })
        .catch((err) => alert('Ocurrió un error')
    ); 
}); 

Trata que poner los acentos a contenido para ver si de esta forma el logra reconocer la function

Un saludo!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Hola, si de hecho es el mismo que se está haciendo en el video de CRUD, junto al instructor, y ambas respuestas me ayudaron a comprender mucho más, pero irónicamente era error del navegador, dado que no estaba iniciando el json-server o no lo detectaba, y hacía que mi promise no tuviera respuesta muchas gracias.

Así que que hicie para solucinarlo solo primero entrar en live con la extensión live server, y despues iniciar el json-sever.