即时通讯使用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:对不起我的英文,不是我的母语
由于
答案 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分配给响应之前请求创建文件,然后在最后再次询问最后一项。
希望有所帮助