Promessas de Javascript com FileReader ()

Eu tenho o seguinte código HTML:

<input type='file' multiple>

E aqui está o meu código 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]);
}

Então, minha pergunta é:como posso fazer esse loop síncrono? Essa é a primeira espera pelo término do carregamento do arquivo e depois passa para o próximo arquivo. Alguém me disse para usarJS Promises. Mas não posso fazer isso funcionar. Aqui está o que estou tentando:

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
            }
        });
    };
}

Desde já, obrigado...

questionAnswers(4)

yourAnswerToTheQuestion