2015-04-24 13 views
5

Ich habe diese Funktion:Rückgabewert berechnet aus Javascript Filereader onload Ereignisse

function doStuff(range, file) { 
    var fr = new FileReader(); 
    var hash = ''; 
    fr.onload = function (e) { 
     var out = "stuff happens here"; 
     hash = asmCrypto.SHA256.hex(out); 
     return hash; 
    }; 
    fr.readAsArrayBuffer(file); 
    return hash; 
} 

Gerade jetzt, vervollständigt die Funktion vor dem onload Ereignis abgeschlossen ist, so doStuff immer wieder „“. Ich denke, ein Rückruf ist, was ich brauche, aber ich bin neu in Javascript, und ich kann mich nicht daran erinnern, wie es in diesem Fall zu implementieren.

Antwort

8

Das Lesen von Dateien mit File Reader ist ein asynchroner Vorgang. Platzieren Sie Ihre Logik innerhalb der onload Funktion des Dateilesers.

Sie können sogar eine Callback-Funktion übergeben, die ausgeführt wird, sobald die Datei gelesen wurde.

function doStuff(range, file, callback) { 
    var fr = new FileReader(); 
    fr.onload = function (e) { 
     var out = "stuff happens here"; 
     hash = asmCrypto.SHA256.hex(out); 
     /* Assuming callback is function */ 
     callback(hash); 
    }; 
    fr.readAsArrayBuffer(file); 
} 
+1

Was ist der Grund zur Abstimmung? –

+1

Keine Ahnung. Mit dieser Antwort scheint nichts falsch zu sein. – Phylogenesis

+1

@Phylogenesis Auch hier gleich. Ich weiß nicht, warum ppl down voting einfach :( –