я следующий HTML код:Javascript Обещания с FileReader()
<input type='file' multiple>
А вот мой 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]);
}
Так что мой вопрос, как я могу сделать эту петлю синхронно? Прежде всего, подождите, пока файл завершит загрузку, а затем перейдет к следующему файлу. Кто-то сказал мне использовать JS Promises
. Но я не могу заставить его работать. Вот что я хочу:
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
}
});
};
}
Заранее спасибо ...
ОБЕЩАНИЯ используются для асинхронных операций. –
Как это сделать синхронно? Я учился в Интернете, все говорят, что он делает код синхронным –
@ZahidSaeed: Нет, обещания не делают код синхронным. Можете ли вы указать на одно из тех мест, которые «все» говорят, что они делают? –