Mam następujący kod HTML:JavaScript Promises z FileReader()
<input type='file' multiple>
i tu jest mój kod JS:
var inputFiles = document.getElementsByTagName("input")[0];
inputFiles.onchange = function(){
var fr = new FileReader();
for(var i = 0; i < inputFiles.files.length; i++){
fr.onload = function(){
console.log(i) // Prints "0, 3, 2, 1" in case of 4 chosen files
}
}
fr.readAsDataURL(inputFiles.files[i]);
}
Więc moje pytanie brzmi, Jak mogę dokonać tej pętli synchroniczne? To jest najpierw czekać na zakończenie ładowania pliku, a następnie przejść do następnego pliku. Ktoś powiedział mi, żebym użył JS Promises
. Ale nie mogę sprawić, żeby działało. Oto, co usiłuję:
var inputFiles = document.getElementsByTagName("input")[0];
inputFiles.onchange = function(){
for(var i = 0; i < inputFiles.files.length; i++){
var fr = new FileReader();
var test = new Promise(function(resolve, reject){
console.log(i) // Prints 0, 1, 2, 3 just as expected
resolve(fr.readAsDataURL(inputFiles.files[i]));
});
test.then(function(){
fr.onload = function(){
console.log(i); // Prints only 3
}
});
};
}
Z góry dzięki ...
obiecuje są używane do operacji asynchronicznych. –
Jak mogę to zrobić synchronicznie? Nauczyłem się w Internecie, wszyscy mówią, że sprawia, że kod synchroniczny –
@ZahidSaeed: Nie, obietnice nie powodują synchronizacji kodu. Czy możesz wskazać jedno z tych miejsc, które "wszyscy" mówią? –