Es gibt viele Wege, aber am einfachsten wäre es, globale Variablen zu verwenden. Wenn Sie Ihre Skripts nicht mit globalen Variablen überladen möchten (die nicht mit den gleichen Problemen wie globale Variablen im Browser zu tun haben sollten, da dort möglicherweise andere Bibliotheken vorhanden sind), können Sie IIFEs verwenden, um den Gültigkeitsbereich zu reduzieren.
casper.start(url);
(function(casper){
var a;
casper.then(function(){
// set a
}).then(function(){
// use a
});
})(casper);
casper.run();
Eine andere Version des globalen ist diese Variablen auf das casper
Objekt hinzuzufügen.
Wahrscheinlich wäre die sauberste Lösung, die Blöcke zu verschachteln, die die Variable benötigen. Beachten Sie, dass ein synchroner Funktionsaufruf nach einem asynchronen Funktionsaufruf nicht kommen kann (das sind alle wait*
und then*
Schrittfunktionen). Geplante Schritte werden nach dem Ende des aktuellen Staps ausgeführt:
casper.start(url).then(function(){
var a; // set a somehow
this.then(function(){
// use a
});
}).then(function(){
// don't use a
}).run();
Danke Artjom. Du hast heute Nacht 3 meiner Fragen beantwortet und ich bin sehr geschätzt! –
Beachten Sie, dass caspers 'then' anders funktioniert als das Standardversprechen' .dann', also würde 'casper.then (function() {return someValue;}). Then (function (a) {}); Gut? –
@Felix Nein, das ist derzeit nicht in CasperJS implementiert. Werte können nicht an nachfolgende Schritte weitergegeben werden. Der Rückgabewert vom ersten 'then' wird nur an 'casper.options.onStepComplete' übergeben und das' a', das an das zweite 'then' übergeben wird, ist die zuletzt geladene Seitenressource. –