Мне нужно сделать цикл 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()
приведенной ниже. Я думал о рекурсивном вызове waitFunc()
после каждого вызова wait()
.
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 раза, как в этом случае?