CasperJS envoie des données POST vides au point final

J'utilise CasperJS pour gratter un site, créer un objet JSON pour organiser les informations scraper, puis POSTER cet objet JSON à un service (en PHP) que ETLs l'information dans une base de données.

Voici le problème, chaque fois que j'essaie d'envoyer l'objet JSON, l'objet est vide, c'est le code que j'utilise pour envoyer les informations.

casper.then(function(){ var productDetails = {}; this.each(products,function(self, product){ self.thenOpen(product, function(a){ productDetails = this.evaluate(getProductDetails); }); self.thenOpen('http://localhost.endpoint.lan/saveScrapingData.php', { method:'post', data: { name:'Alan', info: productDetails }, headers: { 'Content-type': 'application/x-www-form-urlencoded' } }); }); }); 

Le problème est que productDetails est envoyé en tant que vide, et je ne sais pas pourquoi parce que si je console.log la variable à ce stade:

 self.thenOpen(product, function(a){ productDetails = this.evaluate(getProductDetails); }); 

La variable n'est pas vide, plus que probable, c'est une condition de course. La variable est envoyée avant qu'il ne contienne de données, mais je ne comprends pas pourquoi cela se produit, si j'envoie les données après que je suis sûr que la variable contient des données.

Oui, au moment de l'appel, thenOpen la variable productDetails est encore indéfinie. Vous pouvez simplement diviser l'appel thenOpen en then et open afin qu'il soit défini lorsque l' open est effectivement appelée.

 self.then(function(){ this.open('http://localhost.endpoint.lan/saveScrapingData.php', { method:'post', data: { name:'Alan', info: productDetails }, headers: { 'Content-type': 'application/x-www-form-urlencoded' } }); }); 

C'est en raison de la manière asynchrone des étapes casper ( then* ou wait* ). Ils sont programmés mais exécutés plus tard. Le problème est qu'en appelant thenOpen avec l'objet de configuration, la valeur de productDetails undefined comme undefined puisque l'étape précédente n'a pas encore été exécutée.