Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular2动态/多次设置超时和清除超时_Javascript_Angular_Settimeout_Cleartimeout - Fatal编程技术网

Javascript Angular2动态/多次设置超时和清除超时

Javascript Angular2动态/多次设置超时和清除超时,javascript,angular,settimeout,cleartimeout,Javascript,Angular,Settimeout,Cleartimeout,我想删除多个id并延迟撤消(clearTimeout)id。使用这种逻辑,但需要帮助。角度2也许你可以使用一个可观察的: public timerId; delete(id){ this.timerId=id; this.timerId = setTimeout(()=>{ //some logic },5000); } undo(id){ this.timerId = id; clearTimeout(this.timerId); } tryddisw

我想删除多个id并延迟撤消(clearTimeout)id。使用这种逻辑,但需要帮助。角度2

也许你可以使用一个可观察的:

public timerId;

delete(id){
   this.timerId=id;
   this.timerId = setTimeout(()=>{
  //some logic
  },5000);
}

undo(id){
  this.timerId  = id;
  clearTimeout(this.timerId);
}

tryddisway。。。。在本规范中也面临同样的问题。。对于单个场景,它工作正常,在setTimeout和clearTimeout中也可以工作,但是多个delete调用延迟,多个undo调用不工作。只有最后一次(最新的)撤销校准有效。谢谢。。成功了。使它保持不变,这是一种独特的仪式??为什么要这样做?this.subscriptions[id+'']=订阅;请你解释一下,如果一个变量从未被重新赋值,那么应该始终使用“const”。。这是最好的做法。我们在订阅对象中设置了一个以id命名的字段,以便稍后通过id访问订阅。仅此而已。所以在设置之后,subscriptions对象看起来像:{1:subscription},我们可以稍后通过id访问订阅。
private subscriptions = {};

public delete(id) {
    const subscription = Observable.of(null)
        .delay(5000)
        .subscribe(() => {
            // logic here
        });
    this.subscriptions[id+''] = subscription;
}

public undo(id) {
    const subscription = this.subscriptions[id+'']
    if (subscription && !subsciption.isUnsubscribed) {
        subscription.unsubscribe();
    }
    this.subscriptions[id+''] = null;
}