javascript - 强制 setTimeout 比最初设置的时间更早触发其有效负载

标签 javascript jquery settimeout

我开发了一小部分演示软件,其中包含幻灯片和每张幻灯片的资源。渲染幻灯片时,将使用 setTimeout 方法循环遍历并在延迟后渲染其所有资源。看起来很甜蜜...

是啊!,要求已经改变,现在要求演示文稿像 PowerPoint 幻灯片一样,鼠标单击事件将导致下一个资源立即渲染到页面。

我的问题是;有没有办法让我的超时立即触发?我可以获取 timeoutid 并将其存储在堆栈中,因为它是在创建超时时返回的。唯一的其他选择是取消超时,然后重新创建元素,这比我想要做的处理要多得多,而且我不想太多地重构我的代码。

有什么想法吗?

最佳答案

你可以将它包装在一个像这样的闭包中:

function createTimeout(timeoutHandler, delay) {
    var timeoutId;
    timeoutId = setTimeout(timeoutHandler, delay);
    return {
        clear: function() {
            clearTimeout(timeoutId);
        },
        trigger: function() {
            clearTimeout(timeoutId);
            return timeoutHandler();
        }
    };
}

var a = new Date();

var timeout = createTimeout(function() { console.log(a); }, 1000);
// timeout.clear();
timeout.trigger();

更新(现代 js):

let newTimeout = (handler, delay) => {
    let id = setTimeout(handler, delay), clear = clearTimeout.bind(null, id);
    return {id, clear, trigger: () => (clear(), handler())};
};

let timeout = newTimeout(() => console.log(new Date()), 1000);
// timeout.clear();
timeout.trigger();

关于javascript - 强制 setTimeout 比最初设置的时间更早触发其有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689233/

相关文章:

javascript - 删除 react 17.0.2 中的自动前缀警告

javascript - 检测对多个背景图像的支持?

javascript - Javascript 运行时如何将 setTimeout() 识别为 WEB API?

javascript - 使用带超时的模糊来实现点击外部关闭时 - 时间间隔有时太短

javascript - 选择 div 中的特定元素?

javascript - 如何使用 javascript 取消选中数组中的单选按钮

javascript - 运行 Ajax 更改表的顺序后,返回的表上的其他 jQuery 函数未执行

javascript - 使用 jquery 单击其中一个时, Accordion 选择无法正常工作

jquery - 如何向左滚动屏幕(例如-100%)

javascript - HTML5 音频对象不在 iPad 上播放(当从 setTimeout 调用时)