gpt4 book ai didi

javascript - NodeJS setInterval 计时器在第一个间隔后崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:43 25 4
gpt4 key购买 nike

我试图每小时执行一个函数。这本质上是验证来自 MonoDB 的文档。但是,在第一个间隔时,应用程序崩溃并抛出以下错误:

timers.js:252  
callback.apply(this, args);
^

TypeError: Cannot call method 'apply' of undefined
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

以下是我的文件中的片段:

验证器

function validate() { ... }

module.exports = {
validate : validate
}

www

var validator = require('../lib/validator');
var app = require('../app');

app.listen(3000, function() {
setInterval(validator.validate(), 360000);
}

最佳答案

setInterval() 接受方法引用。您只需删除回调中传递的括号即可:

setInterval(validator.validate, 360000);

本质上,间隔第二次触发时,它将尝试调用第一次调用 validate() 的结果,而不是函数本身,因此会出现错误。这是客户端 JavaScript 中的类似测试(据我所知,setInterval 的行为方式相同):

function setTime() {
$('#currentDateTime').html(new Date());
}

$(function() {
setInterval(setTime, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="currentDateTime"></div>

还有作为这个答案的一个有趣的以防万一,我发现另一个用户似乎正确地传递了方法引用,但遇到了类似的错误。该评论假设可能存在超时的上限(int 的大小?signed int?只是猜测)。

Node.js crashes when using long interval in setinterval

关于javascript - NodeJS setInterval 计时器在第一个间隔后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31467703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com