Javascript setInterval在最近编辑我的代码后拒绝运行我的函数。。。为什么?
让你明白我在标题中的意思 请看一下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
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