JavaScript Axios Daten Herunterladen

Wutknubbel

Cadet 3rd Year
Registriert
Dez. 2014
Beiträge
56
Hallo.

Ich schreibe gerade ein Programm welches mir Daten von OSM etc herunterladen soll.
Das ganze möchte ich mit Axios bewerkstelligen.

Die meisten Tutorials zu Axios arbeiten entweder mit async await oder mit axios.get().then(response=>{});
Bei beiden wegen habe ich das Problem die Funktion anscheind vorher fertig ist, bevor ich die Daten aus response bekomme.

Anbei etwas Code
Javascript:
fillBuffer() {
        var downMap = this.tileMap.generateDownloadMap();

        downMap.forEach(element =>  {

            var pattern = {};
            
            if(this.useDomains()) {
                pattern.s = this.getSubDomain(element.x, element.y);
            }

            if(this.useKey()) {
                pattern.k = this.getApiKey();
            }

            pattern.x = element.x;
            pattern.y = element.y;
            pattern.z = element.z;

            var outUrl = this.#fmtUrl(this.url, pattern);
            this.getTile(outUrl, element, this.tileMap.getTileBuffer());
        });
    }

    getTile(url, params, buffer) {
        console.log("Downloading Tile "+params.lx+"/"+params.ly);
        
        var aXHeaders = {
                
            headers: {
                'Accept': '*/*',
                'Accept-Encoding': 'gzip',
                'User-Agent': this.userAgent,
            },
            //'gzip': true,
            'encoding': null,
            responseType: 'arraybuffer'
        };

        axios.get(url, aXHeaders).then(response => {
            console.log("Kick");
            this.tileMap.fillBuffer(params.lx, params.ly, response.data);
        });
    }

Die Funktion fillBuffer erstellt mir Links zu einen TileServer und soll dann in einer Schleife mit getTile die Daten
Herunterladen, die Bilder sollten dann in einen Array gespeichert werden.

Der Abschnitt console.log("Kick") wird erst ausgeführt wenn die Schleife von oben durch ist.
Ich bin noch nicht so extrem gut in Javascript und Node.js.

Vielleicht kann mich jemand auf den rechten pfad führen ?

Grüße
Wutknubbel
 
Ja, das ist so, nach Absetzen eines Requests läuft die aufrufende Methode weiter, ohne auf das Ergebnis zu warten, damit Javascript den Browser nicht blockiert bis die Antwort eintrifft, da die Serverantwort meist doch etwas länger dauert. Dazu musst du dich in die Themen Callbacks oder Promises einarbeiten.
https://www.w3schools.com/js/js_callback.asp
 
  • Gefällt mir
Reaktionen: Wutknubbel und netzgestaltung
Hallo r0b0t

Ich dachte mir schon, das ich um Promises nicht herumkommen würde.
Dann lese ich mich da nochmal ein.

lg
Wutknubbel
 
Zurück
Oben