Javascript 需要运行for循环并同步等待CasperJS
我有一个代码如下Javascript 需要运行for循环并同步等待CasperJS,javascript,asynchronous,phantomjs,synchronous,casperjs,Javascript,Asynchronous,Phantomjs,Synchronous,Casperjs,我有一个代码如下 var casper = require('casper').create(); casper.on('remote.message', function (msg) { this.echo(msg); }); casper.start( << some url >> , function () { this.echo(this.getTitle()); }); var resultObj = []; casper.thenCl
var casper = require('casper').create();
casper.on('remote.message', function (msg) {
this.echo(msg);
});
casper.start( << some url >> , function () {
this.echo(this.getTitle());
});
var resultObj = [];
casper.thenClick("#AddToCart").then(function () {
// scrape something else
casper.options.waitTimeout = 100000;
var objectOne = this.evaluate(someFunction, << variables >> );
//above function returns object
casper.each(objectOne, function (self, obj) {
var anotherObject = this.evaluate(anotherFunction, << variables >> );
self.waitFor(function check() {
var result = this.evaluate(thirdFunction, obj);
if (result != 'no') {
resultObj.push(result);
}
// result = 'yes';
return result != 'no';
this.evaluate(function () {});
}, function then() {
console.log('done')
});
});
});
casper.run(function () {
this.exit();
});
var casper=require('casper').create();
casper.on('remote.message',函数(msg){
这个.echo(msg);
});
casper.start(>,函数(){
this.echo(this.getTitle());
});
var resultObj=[];
casper.然后单击(#AddToCart”)。然后(函数(){
//刮别的东西
casper.options.waitTimeout=100000;
var objectOne=this.evaluate(someFunction,>);
//上面的函数返回对象
casper.each(objectOne,function(self,obj){
var anotherObject=this.evaluate(anotherFunction,>);
self.waitFor(函数检查(){
var结果=此。评估(第三个功能,obj);
如果(结果!=“否”){
结果推送(结果);
}
//结果=‘是’;
返回结果!=“否”;
evaluate(函数(){});
},函数then(){
console.log('done')
});
});
});
casper.run(函数(){
这是exit();
});
它包含一个循环(.each),后跟wait for。我面临的问题是循环被完全执行,然后waitFor被执行。
如何实现它们的同步?看起来您需要使用
casper.eachThen()
而不是casper.each()
警告:您至少需要CasperJS 1.1-beta1才能运行此功能
我无法从您的代码中获得太多信息,但看起来您可能还想将一些casper.evaluate()
更改为casper.thenEvaluate()
我在下面修改的代码周围添加了/--
。希望能有帮助
var casper = require('casper').create();
casper.on('remote.message', function (msg) {
this.echo(msg);
});
casper.start( << some url >> , function () {
this.echo(this.getTitle());
});
var resultObj = [];
casper.thenClick("#AddToCart").then(function () {
// scrape something else
casper.options.waitTimeout = 100000;
var objectOne = this.evaluate(someFunction, << variables >> );
//above function returns object
// ---
casper.eachThen(objectOne, function (response) {
// ---
var anotherObject = this.evaluate(anotherFunction, << variables >> );
this.waitFor(function check() {
// ---
var result = this.evaluate(thirdFunction, response.data);
// ---
if (result != 'no') {
resultObj.push(result);
}
// result = 'yes';
return result != 'no';
this.evaluate(function () {});
}, function then() {
console.log('done')
});
});
});
casper.run(function () {
this.exit();
});
var casper=require('casper').create();
casper.on('remote.message',函数(msg){
这个.echo(msg);
});
casper.start(>,函数(){
this.echo(this.getTitle());
});
var resultObj=[];
casper.然后单击(#AddToCart”)。然后(函数(){
//刮别的东西
casper.options.waitTimeout=100000;
var objectOne=this.evaluate(someFunction,>);
//上面的函数返回对象
// ---
casper.eachThen(objectOne,函数(response){
// ---
var anotherObject=this.evaluate(anotherFunction,>);
this.waitFor(函数检查(){
// ---
var结果=this.evaluate(第三个函数,response.data);
// ---
如果(结果!=“否”){
结果推送(结果);
}
//结果=‘是’;
返回结果!=“否”;
evaluate(函数(){});
},函数then(){
console.log('done')
});
});
});
casper.run(函数(){
这是exit();
});
看起来您需要使用casper.eachThen()
而不是casper.each()
警告:您至少需要CasperJS 1.1-beta1才能运行此功能
我无法从您的代码中获得太多信息,但看起来您可能还想将一些casper.evaluate()
更改为casper.thenEvaluate()
我在下面修改的代码周围添加了/--
。希望能有帮助
var casper = require('casper').create();
casper.on('remote.message', function (msg) {
this.echo(msg);
});
casper.start( << some url >> , function () {
this.echo(this.getTitle());
});
var resultObj = [];
casper.thenClick("#AddToCart").then(function () {
// scrape something else
casper.options.waitTimeout = 100000;
var objectOne = this.evaluate(someFunction, << variables >> );
//above function returns object
// ---
casper.eachThen(objectOne, function (response) {
// ---
var anotherObject = this.evaluate(anotherFunction, << variables >> );
this.waitFor(function check() {
// ---
var result = this.evaluate(thirdFunction, response.data);
// ---
if (result != 'no') {
resultObj.push(result);
}
// result = 'yes';
return result != 'no';
this.evaluate(function () {});
}, function then() {
console.log('done')
});
});
});
casper.run(function () {
this.exit();
});
var casper=require('casper').create();
casper.on('remote.message',函数(msg){
这个.echo(msg);
});
casper.start(>,函数(){
this.echo(this.getTitle());
});
var resultObj=[];
casper.然后单击(#AddToCart”)。然后(函数(){
//刮别的东西
casper.options.waitTimeout=100000;
var objectOne=this.evaluate(someFunction,>);
//上面的函数返回对象
// ---
casper.eachThen(objectOne,函数(response){
// ---
var anotherObject=this.evaluate(anotherFunction,>);
this.waitFor(函数检查(){
// ---
var结果=this.evaluate(第三个函数,response.data);
// ---
如果(结果!=“否”){
结果推送(结果);
}
//结果=‘是’;
返回结果!=“否”;
evaluate(函数(){});
},函数then(){
console.log('done')
});
});
});
casper.run(函数(){
这是exit();
});