最近编辑我的代码后,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
让您了解我标题中的意思。
看一下 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