尝试在angular2中使用setTimeout,我想稍后清除超时。
但Angular2正在返回“ZoneTask”而不是数字
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
}
如何在Angular2中使用正常的setTimeout或首选使用setTimeout然后使用clearTimeout?
答案 0 :(得分:6)
更新
timer:修复#314,setTimeout / interval应该返回原来的timerId (#894)(aec4bd4)
以前的版本
您需要致电
clearTimeout(this.timeoutId);
您可以通过致电
获得timeoutId
this.timeoutId.data.handleId
如果您希望使用原生setTimeout
,那么您可以利用以下内容:
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 work
但我不明白为什么你希望