我使用casperJS循环遍历数组。它工作正常,除非我发射事件时似乎存在某种竞争条件。
脚本导航到URL,等待选择器,然后在DOM中有选择器时触发事件。事件监听器然后执行它所做的事情。
但问题是,在for循环中我得到变量ad_id
的不同结果。我已对代码进行了评论。
当我第一次抓住ad_id时,每次迭代都会有所不同(正常行为)。但是在waitForSelector中调用它会导致每次都使用相同的ad_id。
casper.then(function() {
log(username, 'Grabbing demographic text and submitting to server');
for(i=0; i < ads.length; i++)
{
ad = ads[i];
ad_id = ad.ad_id; // Here ad_id is different each iteration
dText = null;
url = 'https://example.com/page.php?ad_id=' + ad_id + '&page_type=20';
casper.thenOpen(url, function() {
casper.page.injectJs(fs.workingDirectory + '/js/jquery-2.1.4.min.js');
});
casper.waitForSelector('#static_templates', function() {
dText = casper.evaluate(function() {
return $('section').first().text();
});
log(ad_id); // Here, all ad_id's are the same every iteration
this.emit('demographic.recieved', ad_id, dText);
});
casper.wait(5000);
}
});
有什么想法吗?