javascript - 在特定时间(和日期)调用函数

标签 javascript jquery cordova

我正在使用 jQuery Mobile 和 cordova 开发一个应用程序,我的应用程序中有一个倒计时(这是一个添加到我的项目中的插件),我希望当这个计时器达到 10 秒时,调用一个特定的函数。第一个选项是每秒检查一次我的倒计时,但是对于某些性能问题这是不可能的,这不太合理,因为我的倒计时可能显示 5 天。另一种选择是使用 setTimeout,但我认为这会降低性能。不会吗? 假设 setTimeout(function{//function call}, 14400000) 仅持续 4 小时,更不用说几天了。

如果它确实降低了性能,我还有哪些其他选择? node.js 中是否有类似 crone 的 javascript 或 jQuery 之类的东西,以便我们可以指定调用函数的时间和日期?

我的意思是,如果我可以为函数调用设置时间和日期,例如 2016-09-01 15:10:40,那会很好

发送

最佳答案

调用 setTimeout 的性能损失可以忽略不计。解决您描述的问题的最佳方法是计算当前时间与您要执行代码的时间之间的毫秒数,并使用该值作为超时调用 setTimeout。然而,有一个问题你必须要注意,正如@Vld 所概述的:延迟参数被一些浏览器存储为 32 位整数,所以我们需要解决这个问题并定期重新创建超时,直到我们到达我们想要的日期。

此外,您还必须注意示例代码中用于futureDate 参数的日期是UTC 时区,因此请务必在使用前将本地时间转换为UTC。你可以使用的一个很好的图书馆是 Moment.js .

代码如下:

function scheduleExecution(futureDate, callback) {
    // Set an intermediary timeout at every 1 hour interval, to avoid the
    // 32 bit limitation in setting the timeout delay
    var maxInterval = 60 * 60 * 1000;
    var now = new Date();

    if ((futureDate - now) > maxInterval) {
        // Wait for maxInterval milliseconds, but make
        // sure we don't go over the scheduled date
        setTimeout(
            function() { scheduleExecution(futureDate); },
            Math.min(futureDate - now, maxInterval));
    } else {
        // Set final timeout
        setTimeout(callback, futureDate - now);
    }
}

// This example uses time zone UTC-5. Make sure to use the
// correct offset for your local time zone
var futureDate = new Date("2020-09-01T17:30:10-05:00");
scheduleExecution(futureDate, function() {
    alert('boom!');
});

关于javascript - 在特定时间(和日期)调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279456/

相关文章:

javascript - 模拟物理点击以从混淆的 JavaScript 触发行为

javascript - 动态输入字段不起作用

jquery - 如何在 jQuery 点击函数中存储局部变量?

android - android phonegap 中的状态栏通知

javascript - 游戏和 Phonegap = 可作弊?

javascript - 自定义错误和 bluebird 的 catch with ErrorClass 导致无意行为

javascript - 如何制作表单以使用 AJAX/jQuery/JavaScript 提交?

javascript - 如何使用 JavaScript 每秒向右移动 10 个像素并向下移动 10 个像素

android - Phonegap Android 链接 - 下载链接

javascript - 如何相对于包含动态文本的父 div 定位 div?