stop funcion typescript angular setinterval

funcion - setinterval typescript



Angular 2 llamada setInterval() indefinido Formulario de servicios Inyección de dependencia (3)

Hay un pequeño truco para resolver eso. Espero que esto ayude.

Primero hacer

const this1 = this;

entonces

constructor(private auth: AuthService) { setInterval(this1.auth.refreshToken.bind(this), 1000 * 60 * 10); }

Quiero llamar a una función cada 10 minutos usando setInterval () y en esta función quiero usar un Servicio (llamado auth) que recibo del Inyector de dependencia de Angular 2, el problema es que la consola me dice lo siguiente:

EXCEPCIÓN: TypeError: this.auth no está definido

constructor(private auth: AuthService){ setInterval(function(){ this.auth.refreshToken(); }, 1000 * 60 * 10); }


Se puede encontrar una discusión completa de este problema en la documentación del método setInterval (), subtitulado El problema "este" . Alrededor de la mitad de la página.

El problema es que es el resultado de un cambio en la variable "this". La función que se pasa a la función setInterval () se extrae del contexto de la clase y se coloca en el contexto de setInterval () (la ventana). Por lo tanto, es indefinido.

Hay varias soluciones a este problema. El método propuesto por toskv arriba es un enfoque bastante común. Otra solución es usar el método bind ().

constructor(private auth: AuthService) { setInterval(this.auth.refreshToken.bind(this), 1000 * 60 * 10); }

Material de referencia de esta pregunta , respuesta por puntiaguda.

Documentación para el método bind () .

Un buen artículo sobre el alcance de javascript , que aún puede volver a morder en mecanografiado.


esto en la función dada a setInterval no apunta a la clase cuando se llama.

Utilice la función de flecha en su lugar.

constructor(private auth: AuthService){ setInterval(() => { this.auth.refreshToken(); }, 1000 * 60 * 10); }