CasperJS然后每个响应数组的下一个(未来)值

时间:2016-01-11 02:58:24

标签: javascript arrays phantomjs casperjs

即时通讯使用CasperJS的eachThen()方法,我需要知道下一个迭代项的值。

我有这样的项目:

array = [

[22,"blah"],
[22,"blah"],
[23,"blah"],
[24,"blah"],
[24,"blah"],
[24,"blah"]
]

我为每组项目生成一个文件(按[0]分组)。

我的第一种方法是在迭代开始时将实际项目与前一项目进行比较,如果[0]不同则生成文件,如下所示:

//previousItem was initilizated = to actualItem

   casper.eachThen(array , function (response) {
            var actualItem = response.data

        casper.then(function(){
            if(actualItem[0] != previousItem[0]){
                var filename = previousItem[0]+"file.html"
                var f = fs.open(filename, 'a');
                f.write(stdFile);
                f.close();  
                previous = actualItem
            }
        });

//operations that prepares stdFile to be created

问题出现在循环结束时,因为我将实际与之前的比较,最后一组不会生成任何文件(当然,最后两个项目将具有相同的[0],之后循环将结束)

我的解决方案是要求下一个项目而不是前一个项目,并在每次迭代结束时生成文件,但我不知道如何告诉Casper给我项目数组中的actualItem + 1.

我将尝试修复这个在paralel中迭代相同数组并返回实际值+ 1的值,但也许有一种方法可以使用响应变量来完成它。

结果必须是3个文件:22file.html,23file.html和24file.html 有很多要求

,所以我需要赢得任何一秒钟。

如果您有其他方法可以实现这一目标,请告诉我。

PS:对不起我的英文,不是我的母语

由于

1 个答案:

答案 0 :(得分:0)

我的第一种方法太复杂了,可能是因为这些天我没有那么多睡觉。

这就是我所做的:

cajIndex = 0;

//this block generates the file if actualItem (or actualCajero is the same) is not undefined  and the actualItem[0] is not the same as the next item 

if (actualCajero != undefined)
        {
            if (actualCajero[0] != cajerosArray[cajIndex][0]){
                casper.then(function(){

                    var filename = "Ventas local"+" "+nombreLocal+"_"+actualDay[1]+"-"+actualDay[2]
                    stdFile = '<h1>'+filename+'</h1> <table border="1">'+ stdTable + '</table>';
                    this.echo("generando archivo "+filename);
                    var f = fs.open(filename+".xls", 'a');
                    f.write(stdFile);
                    f.close();  
                    stdTable = "";
                    stdFile = "";

                });
            }
        }

//after this i do my operations , ask again for file creating at the end but now if the next item is undefined, if it is undefined creates the file then

cajIndex++

并解决了所有问题,关键是将索引声明为0并在将actualItem分配给响应之前请求创建文件,然后在最后再次询问最后一项。

希望有所帮助