Trato de establecer un intervalo en un archivo .ts pero no entiendo cómo usar una función en el mismo archivo en el intervalo.
Para explicar :
Mi ajuste de intervalo:
this.task = setInterval(function () { this.refreshData(); }, 300);Y mi función en el mismo archivo ts:
refreshData() : void{ console.log('update...'); }Cuando ejecuto en mi dispositivo, tengo este error:
04-19 10:38:57.535 21374-21374/com.ionicframework.app722890 I/chromium: [INFO:CONSOLE(79432)] "TypeError: this.refreshData is not a function at file:///android_asset/www/build/main.js:10987:18 at t.invokeTask (file:///android_asset/www/build/polyfills.js:3:10284) at Object.onInvokeTask (file:///android_asset/www/build/main.js:39626:37) at t.invokeTask (file:///android_asset/www/build/polyfills.js:3:10220) at e.runTask (file:///android_asset/www/build/polyfills.js:3:7637) at invoke (file:///android_asset/www/build/polyfills.js:3:11397) at e.args.(anonymous function) (file:///android_asset/www/build/polyfills.js:2:30193)", source: file:///android_asset/www/build/main.js (79432)Intento de esta manera pero no funciona:
this.task = setInterval(this.refreshData(), 300);Esto llama a mi función solo una vez.
Alguien tiene una idea?
usar la función de flecha
this.task = setInterval(() => { this.refreshData(); }, 300);o almacenar contexto como este
let self = this; this.task = setInterval(function () { self.refreshData(); }, 300); o usando bind
this.task = setInterval((function () { this.refreshData(); }).bind(this), 300);si solo una llamada de función:
this.task = setInterval(this.refreshData.bind(this), 300);puede obtener más información sobre esto con https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/this%20%26%20object%20prototypes/ch1.md
Debe usar setInterval() con => flecha, como mencioné a continuación
setInterval(() => { console.log('timer'); //you can call function here },5000);100% funcionando.
prueba esto:
setInterval(this.refreshData, 300);