Intentando usar setTimeout en angular2 y quiero borrar el tiempo de espera más tarde.
Pero Angular2 devuelve una "ZoneTask" en lugar de un número
constructor() { this.name = 'Angular2' this.timeoutId = setTimeout(() => { console.log('hello'); }, 2000); console.log("timeout ID---", this.timeoutId); // Output - ZoneTask {_zone: Zone, runCount: 0, _zoneDelegates: Array[1], _state: "scheduled", type: "macroTask"…}_state: "notScheduled"_zone: Zone_zoneDelegates: nullcallback: function () {cancelFn: nulldata: Objectinvoke: function () {runCount: 0scheduleFn: function scheduleTask(task) {source: "setTimeout"state: (...)type: "macroTask"zone: (...)__proto__: ZoneTask app.ts:24 }¿Cómo uso el setTimeout normal o cuál es el preferido para usar setTimeout y luego clearTimeout en Angular2?
Actualizar
Lanzamiento zone@0.8.18 (2017-09-27)
temporizador: arreglo #314, setTimeout/interval debe devolver el timerId original (#894) (aec4bd4)
Versión previa
tienes que llamar
clearTimeout(this.timeoutId); El timeoutId que puede obtener llamando
this.timeoutId.data.handleId Si desea utilizar setTimeout nativo, puede aprovechar algo como esto:
this.timeoutId = window['__zone_symbol__setTimeout'](() => { console.log('hello'); }, 2000); // setTimeout will work, but it returns ZoneTask console.log("timeout ID---", this.timeoutId); window['__zone_symbol__clearTimeout'](this.timeoutId); // clearTimeout will also workPero no entiendo por qué deseas eso.