循环中有多个Javascript延迟

时间:2012-08-09 14:47:18

标签: javascript jquery loops delay settimeout

如何构建评论所展示的功能?

// 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开发人员。

这是一个机器人,可以为我自动执行一些网络任务。

非常感谢

2 个答案:

答案 0 :(得分:1)

也许您可以将此方法用作模板,然后将所有任务划分为自己的功能。

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);
}

答案 1 :(得分:0)

你不能睡觉&#39; 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 );
} );