Javascript Promesses avec FileReader()

J'ai le Code HTML suivant:

<input type='file' multiple>

Et Voici mon Code 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]);
}

Donc ma question est, comment puis-je faire cette boucle synchrone ? C'est d'abord attendre que le fichier à la fin du chargement, puis passer au fichier suivant. Quelqu'un m'a dit d'utiliser JS Promises. Mais je ne peux pas me rendre au travail. Voici ce que j'essaie:

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

Merci d'avance...

Les promesses sont utilisés pour les opérations asynchrones.
Comment puis-je faire synchrone alors ? J'ai étudié sur internet, ils disent tous qu'elle rend le code synchrone
Non, promet de ne pas faire de code synchrone. Pouvez-vous point à un de ces endroits que "tous", disent-ils faire?
MDN a Dit: "Une Promesse représente un proxy pour une valeur pas nécessairement connues lorsque la promesse est créé. Il vous permet d'associer les gestionnaires à une action asynchrone de l'éventuelle valeur de succès ou de l'échec de la raison. Cela vous permet de méthodes asynchrones valeurs de retour comme les MÉTHODES SYNCHRONES":
Oui. Vous pouvez la faire se comporter de manière quasi-synchrone si par synchrones vous dire que vous pouvez contrôler l'ordre dans lequel les différentes parties de votre fichier de lecture de code sont exécutées. Mais il continue à fonctionner de manière asynchrone dans le respect de la souris, par exemple les gestionnaires ou le moteur JavaScript lui-même. "comme une méthode synchrone" n'est pas la même chose que "est une méthode synchrone".

OriginalL'auteur Zahid Saeed | 2015-12-28