Javascript - 为每个数组值设置间隔。设置间隔,数组,foreach
Posted
技术标签:
【中文标题】Javascript - 为每个数组值设置间隔。设置间隔,数组,foreach【英文标题】:Javascript - Set interval for each array value. setinterval, array, foreach 【发布时间】:2014-10-05 01:32:16 【问题描述】:我试图在某个时间间隔内获取每个数组链接。 例如:我得到第一个链接,等待 30 秒,下一个链接,等待 30 秒另一个链接等。 这是我的代码:
var urls = [ 'http://mylink1','http://mylink2','http://mylink3','http://mylink4'];
setInterval(function()
urls.forEach(function(entry)
console.log(entry);
ajaxd(entry);
console.log("merge pana aici");
);
,30000);
function ajaxd(my_url)
$.ajax(
type : "POST",
url : my_url,
success : function(msg)
console.log(my_url);
);
问题是,30 秒后我得到了所有链接。不是第一个值,等待 30 秒,下一个值等等..
【问题讨论】:
【参考方案1】:EDIT更新代码以导致循环重复。
(function()
var urls = ['http://mylink1', 'http://mylink2',
'http://mylink3', 'http://mylink4'];
// Start off at the first element.
var idx = 0;
var len = urls.length;
// Do the next link
function doNext()
var entry = urls[idx];
console.log(idx + ":" + entry);
//ajaxd(entry);
idx++;
console.log([idx, len]);
if (idx < len)
// Don't do anything special
else
// Reset the counter
idx = 0;
setTimeout(doNext, 300);
// And the code needs kicked off somewhere
doNext();
());//end of function
【讨论】:
谢谢@Jeremy J Starcher。这是一个很好的答案,但我需要一个循环,在 link4 重复数组之后。 :) @Andrei 进行了最小的更改以使其重复...我更新了代码来处理它。 @JeremyJStarcher 如果我想在 link4 之后暂停一下,你能帮我吗?例如:link4 -- 等待 60 秒 --(重复数组?:)) 您拥有添加该功能所需的所有工具。试一试,如果您无法弄清楚,那么应该将其作为一个新问题提出。如果你不能自己解决,***.com/questions/16873889/… 我在控制台中使用此代码邀请我的朋友在 90 年代间隔为我在 Facebook 上的页面点赞,以避开他们的视线。击败手点击 500 个按钮;)谢谢 Jeremy。【参考方案2】:创建一个 foreach 将在间隔后立即遍历数组中的所有值。
更好的解决方案是不迭代...
例如
var counter = 0;
setInterval(function()
if(counter < url.length)
ajaxd(url[counter]);
counter++;
else
return;
, 30000);
【讨论】:
目前为止最好的答案是让它成为一个无限循环,只需在其他条件下将计数器设置为 0,它就会重新启动,这正是我所需要的谢谢队友【参考方案3】:如果您仍想使用forEach 循环数组,您可以将它与 setTimeout 一起使用,而不是与setInterval 一起使用。
var urls = ['http://mylink1', 'http://mylink2', 'http://mylink3', 'http://mylink4'],
interval = 2000, // = 2s
increment = 1;
urls.forEach(function(url)
var runner = setTimeout(function()
// Do your stuff.
console.log(url);
clearTimeout(runner);
, interval * increment);
increment = increment + 1;
);
【讨论】:
【参考方案4】:在您的闭包中,您使用 for 循环一次请求所有项目。
【讨论】:
【参考方案5】:var urls = ['http://mylink1','http://mylink2','http://mylink3','http://mylink4'],
var request = function(index)
$.ajax(
type : "POST",
url : urls[index],
success : function(content)
console.log(content);
if (index + 1 < urls.length)
setTimeout(function ()
request(index + 1);
, 30 * 1000); // 30s
);
request(0);
【讨论】:
【参考方案6】:你做错了尝试每 30 秒创建一个计数器。 检查此代码:
$(document).ready(function()
var urls = [ 'http://mylink1','http://mylink2','http://mylink3','http://mylink4'],
counter = 0;
obj =
obj.ajaxd = function(my_url)
$.ajax(
type : "POST",
url : my_url,
success : function(msg)
console.log(my_url);
);
obj.leftInterval = setInterval(function()
if(urls[counter] != undefined)
obj.ajaxd(urls[counter]);
counter++;
else
counter = 0;
,30000);
);
【讨论】:
谢谢@NEWBIE。你忘了if(urls[counter] != undefined)
和`...,30000); );.如果您想编辑您的代码,再次感谢【参考方案7】:
使用这个:
var urls = [ 'http://mylink1','http://mylink2','http://mylink3','http://mylink4'];
urls.reverse();
var interval = setInterval(function()
if(urls.length == 0)
clearInterval(interval);
return;
var entry = urls.pop();
console.log(entry);
ajaxd(entry);
console.log("merge pana aici");
, 30000);
请注意,这将更改您的数组。它将从中删除元素,直到它为空。
编辑:根据 Andrei 的评论,在 clearInterval 之后添加了一个 return 语句 :) 谢谢。
【讨论】:
很好的答案,但是在link4之后,你得到了未定义并且循环结束了。 :) [Salutari din romania :)) ]以上是关于Javascript - 为每个数组值设置间隔。设置间隔,数组,foreach的主要内容,如果未能解决你的问题,请参考以下文章
Jquery 每个循环延迟/间隔应用数组的内联样式更改。循环的