Gagamehl: JavaScript / Node.js HTTP Get Request

Hallo zusammen,

nach vielen Jahren PHP versuche ich mich erstmals an einer node.js-Anwendung. Die Anwendung soll per HTTP-Get-Request ein Bild von einem externen Server anfordern und in einem weiteren Schritt dann bearbeiten. Das Ganze soll später intern in einem Firmennetz eingesetzt werden, sodass die Urheberrechtsfrage hier vorerst nicht von Relevanz ist.

Ich bin noch dabei, mir die Grundlagen von Node und serverseitigem JavaScript anzueignen. Und hier scheitert es leider im Moment schon.

Konkret habe ich folgende Frage: Warum ist der Array image_data am Ende des Skripts leer obwohl er in innerhalb der http.request()-Funktion noch gefüllt ist?

import * as http from 'http';

const url = {
    host: 'src.selfhtml.org', // Ist hier nur eine Beispiel-URL
    path: '/selfhtml.png'
}

let image_data = [];

http.request(url, res => { 
    res.on('data', chunk => image_data.push(chunk));
}).end();

console.log(image_data);
  1. Tach!

    Konkret habe ich folgende Frage: Warum ist der Array image_data am Ende des Skripts leer obwohl er in innerhalb der http.request()-Funktion noch gefüllt ist?

    Das ist ein zeitliches Problem. Das Array wird erst dann gefüllt, wenn der Callback aufgerufen wird. Dein console.log() wird aber sofort nach dem Start des Requests ausgeführt, da ist der Request noch unterwegs, und das Array ist noch leer.

    Willkommen bei der asynchronen Programmierung. Alles was darauf aufbaut, dass ein asynchroner Vorgang beendet ist, muss im Callback ausgeführt werden oder von diesem aus aufgerufen werden.

    dedlfix.

    1. Danke, das hilft!

      Erfordert offensichtlich ein bisschen mehr Umdenken, wenn man da mit PHP-Hintergrund anfängt. 😀