簡體   English   中英

在模塊化功能中重置計時器似乎會導致計時器無法啟動。 為什么setTimeout不起作用?

[英]Resetting a timer within a modular function seems to cause timer not to fire. Why doesn't the setTimeout work?

代碼示例:

define(function() {
    var self = this,
        saveTimer = null,
        saveFunction = null,
        timer_sleep = 0;

    self.initAutoSave = function initAutoSave(saveMethod, duration) {
        timer_sleep = duration;

        saveFunction = function saveFunction() {
            if (saveMethod) {
                saveMethod();
            }
        }

        saveTimer = window.setTimeout(saveFunction, timer_sleep);
    }

    self.resetAutoSave = function resetAutoSave() {
        window.clearTimeout(saveTimer);

        saveTimer = window.setTimeout(saveFunction, timer_sleep);
    }

    return self;
});

上面的模塊用於設置自動保存方法。 我注意到的是,最初該方法被調用。 但是,稍后在我調用reset時,不再調用該方法。

我花了一些時間對此進行研究,沒有找到為什么在清除並重置計時器后setTimeout突然停止觸發的原因。

在此先感謝您的幫助!

我發現這樣做的原因是由於該函數需要傳遞給復位,因此,當計時器重新初始化時,它可以像下面這樣引用該函數:

    self.resetAutoSave = function resetAutoSave(saveMethod) {
    window.clearTimeout(saveTimer);
    saveTimer = null;
    saveFunction = null;

    saveFunction = function saveFunction() {
        if (saveMethod) {
            saveMethod();
        }
    }

    saveTimer = window.setTimeout(saveFunction, timer_sleep);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM