Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setInterval在最近编辑我的代码后拒绝运行我的函数。。。为什么?_Javascript_Node.js_Setinterval - Fatal编程技术网

Javascript setInterval在最近编辑我的代码后拒绝运行我的函数。。。为什么?

Javascript setInterval在最近编辑我的代码后拒绝运行我的函数。。。为什么?,javascript,node.js,setinterval,Javascript,Node.js,Setinterval,让你明白我在标题中的意思 请看一下setInterval停止工作之前的代码 var anime = function(){ _.each(db.get('','animedb'), function(site){ var ann = function(){ ^该函数位于一个变量中 for (var epid in eps) { epid = parseInt(epid, 10); var eptime = (new Date(eps[epid].pubD

让你明白我在标题中的意思

请看一下setInterval停止工作之前的代码

var anime = function(){
    _.each(db.get('','animedb'), function(site){
        var ann = function(){
^该函数位于一个变量中

for (var epid in eps) {
    epid = parseInt(epid, 10);
    var eptime = (new Date(eps[epid].pubDate[0])*1000)/1000;
    if(eptime > site.lastbuilddate){
        counter = counter+1;
        if(counter < 6){
            list.push(font(colors['normal'])+eps[epid].title[0] +' - ['+ utils.secondsToString((new Date() - (eptime+site.delay))/1000, 1)+' ago.]</f>');
        }
    }
};
^下面是每个对话框底部的设置间隔

anime();
^下面是对调用setInterval的整个函数的调用

以上代码是动画网站所有者使用其rss源拥有的聊天室的动画公告的一部分

上面的代码是有效的,请原谅我在这里这么说。 我要说“我不知道为什么”。因为我真的不知道为什么setInterval会选择何时工作。 我和一位比我更了解javascript和基于时间的函数的朋友谈过,他说setInterval运行不需要“条件”

for (var epid in eps) {
    epid = parseInt(epid, 10);
    var eptime = (new Date(eps[epid].pubDate[0])*1000)/1000;
    if(eptime > site.lastbuilddate){
        counter = counter+1;
        if(counter < 6){
            var url = eps[epid].link.split('//')[1];
            var keyword = '';
            var words = url.substr(0, url.length-1).split('/').join('-').split('-');
            for (var wid in words) {
                keyword += words[wid].charAt(0);
            }
            http.get({hostname:'dev.ilp.moe', port:80, path:'/surl/yourls-api.php?username=usernameremovedforsecurity&password=passwordremovedforsecurity&format=json&action=shorturl&url='+url+'&title='+ctitle+' - '+eps[epid].title[0]+'&keyword='+keyword}, function(r) {
                if(r.statusCode === 200) { //200 is success
                    var b = '';
                    r.on('data', function(c) {
                        b += c;
                    });
                    r.on('end', function() {
                        list.push(font(colors['normal'])+eps[epid].title[0] +' - ['+ utils.secondsToString((new Date() - (eptime+site.delay))/1000, 1)+' ago.] - http://dev.ilp.moe/surl/'+keyword+'</f>');
                    }
                }
            });
        }
    }
};
最近对我的代码进行的编辑应该是使用数据库中站点的rss提要中提供的链接为发布的每一集实现缩短的链接

域名是我的域名

我到处都有控制台日志记录,并尽可能多地进行测试。
此时,我不明白为什么编辑会使以前由setInterval执行的代码不再执行。

代码未执行的原因是函数被分配给了一个变量,因此它们在到达setInterval之前不会运行

当它们达到setInterval时,错误会阻止setInterval执行(取决于错误的严重程度)

在获取函数并只是运行它而没有将其放入var或setInterval和控制台日志记录中一段时间后,我发现错误是由这一行引起的

var url = eps[epid].link.split('//')[1];
在这种情况下

eps[epid].link; // === ["http://blah.com/animelolep1"]
我的问题是,var url试图在列表而不是字符串上拆分

这是解决办法

var url = eps[epid].link[0].split('//')[1]; // grabs the first item from the list and then splits

一方面,核心库函数“有时”会失败。另一方面,我们有你的代码,有时显示缺乏基本的错误处理。如果setInterval失败,将会有很多关于它的错误报告,我敢打赌您的代码中有某种导致失败的错误。首先,我会逐步浏览您的代码,查看执行的内容以及可能出现的问题。我已经这样做了,所以我在所有地方都放置了控制台日志。出于某种原因,setInterval根本没有运行我的代码来访问我放置的console.log()。我可以尝试在没有setInterval的情况下运行代码,看看它是否运行或是否出错。如果它不出错,那么你提到的前一种情况似乎正在发生。这也不是第一次发生在我身上@Paul在单步执行代码时,您甚至可以看到正在执行的setInterval吗?如果你在它上面设置一个断点,它能到达那里吗?如果你
setInterval(function(){console.log(“Got-here.Yay”);},
?你调试它时看到了什么?@mido22很有趣,但告诉我为什么在我添加了console.log(site)之后在你告诉我设置间隔开始工作并开始在日志中显示错误之后,这对任何人来说都是太多的代码了。你也给了我们两个版本;我们应该在头脑中区分它们?指南是“复制所需的最短代码”。请将您的代码简化为一个简单的案例。作为一个有用的附带好处,在这样做时,您可能会自己发现问题。
eps[epid].link; // === ["http://blah.com/animelolep1"]
var url = eps[epid].link[0].split('//')[1]; // grabs the first item from the list and then splits