gpt4 book ai didi

javascript - casper.js 中的 setInterval 和 this.wait

转载 作者:数据小太阳 更新时间:2023-10-29 05:46:56 25 4
gpt4 key购买 nike

我需要在每次迭代之间做一个3 次 2 秒的循环。我尝试了这 3 个选项:

选项 1

var casper = require('casper').create({
verbose: false,
logLevel: 'debug'
});

casper.start("http://google.com");

casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
})

casper.thenEvaluate(function() {
var x = 0;
var intervalID = setInterval(function () {

console.log("Using setInternal " + x);

if (++x === 3) {
window.clearInterval(intervalID);
}
}, 2000);

});

casper.run();

观察:没有出现,因为脚本在调用第一个 setInterval 之前立即结束。

选项 2

thenEvaluate() 替换为下面的 then()

for (i=0; i<3; i++) {
this.wait(2000);
this.echo('Using this.wait ' + i);
}

观察:它立即输出 3 次,然后等待很长时间,因为 this.wait() 是异步的。这不是我想要的,因为我想要两者之间的延迟。

选项 3用下面的代码替换 then() 中的部分。我正在考虑在每次调用 wait() 之后对 waitFunc() 进行递归调用。

var count = 0;
var waitFunc = function() {
this.wait(2000, function() {
if (count < 3) {
casper.echo('Using this.wait ' + count);
count++;
waitFunc();
}
});

};

观察:屏幕上没有打印出任何内容。

所以我的问题是:如何使 this.wait 或 setInterval 像这种情况一样在 3 次循环中工作?

最佳答案

这是解决您的问题的示例实现:

var casper = require('casper').create();
var last, list = [0, 1, 2, 3];

casper.start("http://google.fr/", function() {
this.echo('google');
});

casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
});

casper.thenEvaluate(function() {
window.x = 0;
var intervalID = setInterval(function() {
console.log("Using setInternal " + window.x);
if (++window.x === 3) {
window.clearInterval(intervalID);
}
}, 500);
});

casper.each(list, function(self, i) {
self.wait(500, function() {
last = i;
this.echo('Using this.wait ' + i);
});
});

casper.waitFor(function() {
return last === list[list.length - 1] && 3 === this.getGlobal('x');
}, function() {
this.echo('All done.').exit();
});

casper.run(function() {});

示例输出:

$ casperjs test.js
google
remote message caught: Using setInternal 0
Using this.wait 0
remote message caught: Using setInternal 1
Using this.wait 1
remote message caught: Using setInternal 2
Using this.wait 2
Using this.wait 3
All done.
$

关于javascript - casper.js 中的 setInterval 和 this.wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13550093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com