循环中存在多个Javascript延迟

问题描述:

如何构建评论中演示的功能?循环中存在多个Javascript延迟

// for(x=0;x<10;x++) 
$('a[attr*="unique"]:first').attr('id', 'mysuperid1'); 
document.getElementById("mysuperid1").click(); 
// delay 

$("span:contains(action)").parent().click(); 
// delay 

$jq("a:contains(action)").attr('id', 'mysuperid2'); 
document.getElementById("mysuperid2").click(); 
// delay 

$('input[value="action"]').attr('id', "mysuperid3"); 
document.getElementById("mysuperid3").click(); 
// delay 

// back to the top of loop 

(名称,并选择/检索词已被修改)

我认为这个问题是像这里找到http://darklaunch.com/2011/05/21/javascript-for-loop-using-settimeout-to-pass-argument的问题,但我无法弄清楚如何推断教什么链接到上包含多个延迟,因为我不是一个JavaScript开发人员。

这是一个bot,它会为我自动完成一些web任务。

非常感谢

+0

看看jQuery的['queue'(http://api.jquery.com/queue) – zzzzBov 2012-08-09 14:54:55

也许你可以使用这种方法为模板,然后把所有的任务,纳入自己的功能。

var delay = 1000; 

function beginTasks(){ 
    taskOne(); 
} 

function taskOne(){ 
    // Do something 
    window.setTimeout(function(){ 
     taskTwo(); 
    }, delay); 
} 

function taskTwo(){ 
    // Do something else 
    window.setTimeout(function(){ 
     beginTasks(); // <-- back to start 
    }, delay); 
} 
+0

这个作品!非常好!谢谢! – 2012-08-09 15:08:12

你不能在Javascript中做'睡眠'动作。

但是,您可以使用async节点模块,也可用于浏览器,它将为您提供一些很好的异步语法包装,以帮助您处理诸如setTimeout之类的异步函数。

你的代码应该类似于:

async.whilst(function () { 
    /* condition */ 
}, function (whilstCallback) { 
    async.series([ 
     function (seriesCallback) { /* action 1 */ seriesCallback(); }, 
     window.setTimeout.bind(window, 1000), 
     function (seriesCallback) { /* action 2 */ seriesCallback(); }, 
     window.setTimeout.bind(window, 1000), 
     /* ... */ 
    ], whilstCallback); 
});