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的主要内容,如果未能解决你的问题,请参考以下文章

javascript数组

Javascript - 对象值的数组使用迭代的最后一个值

Jquery 每个循环延迟/间隔应用数组的内联样式更改。循环的

如何使用 javascript 或 jquery 为每个数组元素设置背景颜色和边框?

从Javascript中的数字数组返回坐标(x,y)

hihoCoder挑战赛1 毁灭者问题