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);
}