【问题标题】:Multiple Javascript delays in loop循环中的多个 Javascript 延迟
【发布时间】:2012-08-06 19:58:40
【问题描述】:

如何构建 cmets 演示的功能?

// 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 开发人员,所以我无法弄清楚如何推断该链接上所教的内容以包含多个延迟。

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

非常感谢

【问题讨论】:

标签: javascript jquery loops delay settimeout


【解决方案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);
}

【讨论】:

    【解决方案2】:

    您不能在 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 );
    } );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多