循环中存在多个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任务。
非常感谢
答
也许你可以使用这种方法为模板,然后把所有的任务,纳入自己的功能。
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);
});
看看jQuery的['queue'(http://api.jquery.com/queue) – zzzzBov 2012-08-09 14:54:55