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();
});