CasperJS: Durch URLs iterieren

Ich bin ziemlich neu in CasperJS, aber gibt es keine Möglichkeit, eine URL zu öffnen und CasperJS-Befehle in for-Schleifen auszuführen? Dieser Code funktioniert beispielsweise nicht wie erwartet:

casper.then(function() {
    var counter = 2013;
    for (i = counter; i < 2014; i++) {
        var file_name = "./Draws/wimbledon_draw_" + counter + ".json";
        // getting some local json files
        var json = require(file_name);
        var first_round = json["1"];
        for (var key in first_round) {
            var name = first_round[key].player_1.replace(/\s+/g, '-');
            var normal_url = "http://www.atpworldtour.com/Tennis/Players/" + name;
            // the casper command below only executes AFTER the for loop is done
            casper.thenOpen(normal_url, function() {
                this.echo(normal_url);
            });
        }
    }
});

Stattdessen ruft Casper anthenOpen Bei jeder neuen URL pro Iteration wird sie erst aufgerufen, nachdem die for-Schleife ausgeführt wurde. KasperthenOpen wird dann mit dem letzten Wert aufgerufen, auf den normal_url gesetzt ist. Gibt es keinen Casper-Befehl, damit er bei jeder Iteration in der for-Schleife funktioniert?

Follow-up: Wie wird casper thenOpen veranlasst, einen Wert für die aktuelle Iteration der for-Schleife zurückzugeben?

Nehmen wir zum Beispiel an, ich brauchte einen Rückgabewert dafürthenOpen (Wenn der HTTP-Status 404 ist, muss ich möglicherweise eine andere URL auswerten, damit ich false zurückgeben kann.) Ist das möglich zu tun?

Bearbeitungcasper.thenOpen oben anrufen:

    var status;
    // thenOpen() only executes after the console.log statement directly below
    casper.thenOpen(normal_url, function() {
        status = this.status(false)['currentHTTPStatus'];
        if (status == 200) {
            return true;
        } else {
            return false;
        }
    });
    console.log(status); // This prints UNDEFINED the same number of times as iterations.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage