Ich erstelle einfache Upload-Formular (für. Zip-Dateien) und ich möchte überprüfen, ob Zip alle Dateien enthält, die später erforderlich sein werden.Rückgabe wahr/falsch von der asynchronen Funktion in synchronen if()
so habe ich eine Funktion isZipCorrect():
isZipCorrect = function() {
'use strict';
if (this.name.slice(-3) === 'zip') {
var fileReader = new FileReader();
var zip = new JSZip();
var shpCorrect = false;
fileReader.onload = function() {
var zip = new JSZip(this.result);
shpCorrect = zip.file(/.*?/).every(function(file) {
return (file.name.slice(-3) === 'shp' ||
file.name.slice(-3) === 'dbf' ||
file.name.slice(-3) === 'shx');
});
console.log(shpCorrect);
};
fileReader.readAsArrayBuffer(this.file);
return shpCorrect;
} else {
return true;
}
und ich benutze es in if(isZipCorrect())
vor XMLHttpRequest.
Ich nehme an, dass das Problem asynchrone Funktion (fileReader.onload) ist, die Operation beenden, wenn der gesamte Code bereits beendet ist. Aber ich möchte nicht send-Funktion von fileReader.onload aufrufen, denn für mich ist Zip-Korrektur muss optional sein (Sie sollten in der Lage sein, andere Dateien hochladen, die ohne Parsen gehen)
So müssen Sie es brechen und rufen Sie den zweiten Abschnitt nach dem asynchronen Aufruf erfolgt. Sieh dir Versprechungen an – epascarello