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

setInterval refuses to run my function after recent edit to my code... why?

让您了解我标题中的意思。

看一下 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>');
        }
    }
};

^ 这是编辑后破坏一切的部分

var run = setInterval(ann, site.interval*60000);

^ 这是 setInterval,它位于每个

的底部
anime();

^ 这里是调用 setInterval

的整个函数的调用

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

上面的代码是有效的,请原谅我现在这么说。 我要说 "I have no idea why"。因为我真的不知道为什么 setInterval 会选择何时开始工作。 我和一位在 javascript 和基于时间的函数方面知识比我多的朋友交谈过,他说 setInterval 不需要 "conditions" 到 运行。

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>');
                    }
                }
            });
        }
    }
};

以上代码是创建shorturls的部分。

这是正在加载的 json 数据库。

{"0":{"lastbuilddate":1426441081000,"delay":0,"host":"www.animerush.tv","path":"/rss.xml","chats":["animerushtv"],"interval":15},"1":{"lastbuilddate":1424068119000,"delay":28800000,"host":"dubbedanime.tv","path":"/feed/","chats":["dubbed-anime-tv"],"interval":15},"2":{"lastbuilddate":1426415086000,"delay":32400000,"host":"bestanimes.tv","path":"/feed/","chats":["bestanimestv"],"interval":15},"3":{"lastbuilddate":1426434866000,"delay":0,"host":"www.theanime.tv","path":"/feed/","chats":["timecapsule"],"interval":15}}

最近对我的代码进行的编辑应该为使用数据库中站点的 rss 提要中提供的链接发布的每一集实现缩短链接。

http://ilp.moe 是我的域。

我在所有地方都记录了控制台,并尽可能多地进行了测试。 在这一点上,我不明白为什么编辑使以前由 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