【问题标题】: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 );
} );