【问题标题】:Angular2 setTimeout and cleartimeout dynamically /multipleAngular2 setTimeout 和 cleartimeout 动态/multiple
【发布时间】:2018-03-12 18:25:34
【问题描述】:
public timerId;

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

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

我想删除多个 id 并延迟撤消(clearTimeout 特定)id。使用此逻辑但需要失败的帮助。 Angular2

【问题讨论】:

    标签: javascript angular settimeout cleartimeout


    【解决方案1】:

    也许你可以使用 Observable:

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

    【讨论】:

    • tryd dis way.. 在这段代码中也面临同样的问题.. 对于单一场景它工作正常,也可以在 setTimeout 和 clearTimeout 中工作但是多个删除调用延迟并撤消多个它不工作。只有最后一个(最新的)撤消校准有效。
    • 谢谢你..它工作。让它保持不变它作为独特的仪式?为什么这样做? this.subscriptions[id+''] = 订阅;请问你能解释一下吗?
    • 如果一个变量永远不会被重新分配'const'应该总是使用..这是最佳实践。我们在订阅对象中设置一个以 id 命名的字段,以便稍后通过 id 访问订阅。就这样。所以设置之后,订阅对象就变成这样了: { 1: subscription } 之后我们就可以通过 id 来访问订阅了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2011-12-31
    • 1970-01-01
    相关资源
    最近更新 更多