es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamada de función Angular dentro de fetch (ngOnInit)

Quiero llamar a una función dentro de un fetch, pero por alguna razón obtengo el siguiente error y no puedo encontrar una solución.

 Uncaught (in promise): TypeError: No se pueden leer las propiedades de indefinido (leyendo 'myFunction')
TypeError: No se pueden leer las propiedades de indefinido (leyendo 'myFunction')

¿Cómo debo llamar a una función dentro del fetch -> then ?
Reproducción minimalista en el enlace siguiente:

https://plnkr.co/edit/kizI9pLOe8XZzKYz?preview

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para llamar a una función dentro de un bloque then de fetch, debes asegurarte de que el alcance se refiera al objeto correcto. Es posible que te enfrentes a este problema cuando el contexto de la función de devolución de llamada this ya no apunta al contexto original de this.

    Aquí hay algunas formas de llamar a una función dentro del bloque then de fetch:

    Opción 1: Vincular la función al contexto correcto de this

    fetch('https://jsonplaceholder.typicode.com/todos/1')
      .then(response => response.json())
      .then(function(data) {
        console.log(data);
        this.myFunction(); // esto no funcionará
      }.bind(this)); // esto vinculará el contexto correcto de `this`
    

    Opción 2: Usar una función de flecha

    fetch('https://jsonplaceholder.typicode.com/todos/1')
      .then(response => response.json())
      .then(data => {
        console.log(data);
        this.myFunction(); // esto funcionará
      });
    

    Opción 3: Almacenar el contexto de this

    const self = this;
    fetch('https://jsonplaceholder.typicode.com/todos/1')
      .then(response => response.json())
      .then(function(data) {
        console.log(data);
        self.myFunction(); // esto funcionará
      });
    

    He creado una reproducción minimalista en Plunkr: https://plnkr.co/edit/YdD7VrbpBN6uqzV1

Comments are closed.