Michael_K: Warum steht Variable in Funktion nicht zur Verfügung (Frage zum Wiki-Artikel „File Upload“)

Beitrag lesen

problematische Seite

Hallo,

die for ... of Variante hat auch den Vorteil, dass bei Bedarf await, continue, break, etc. zur Verfügung stehen. Mit forEach wäre ich immer sehr vorsichtig bzw. würde immer .map() bevorzugen. Mit dem Spread Operator (...) kann man die FileList elegant in ein Array wandeln. Und da ich weiter oben etwas von Lesbarkeit gelesen habe, würde ich die asynchronen Dinge fein säuberlich auslagern ;-)

Also etwa so:

async function dateiauswahl(evt) {

    const fileArray = [...evt.target.files];
    // den Speicher schonend nacheinander einlesen
    for(const file of fileArray) {
        let fileText = await dateiLesenAsync(file);
        // conntinue, break, etc. sind verfügbar
    }

    // oder alles auf einmal
    let fileTextArray = await Promise.all(fileArray.map(file => dateiLesenAsync(file)));
}

async function dateiLesenAsync(file) {
    return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onload = function () {
            resolve(reader.result);
        }
        reader.onerror = function (error) {
            reject(error)
        };
        reader.readAsText(file);
    });
}