https://codepen.io/jpwade95/pen/WNdZOMQ?editors=1010
$(document).on('click', '.save', function (e) { var teamNameImageList = []; $('.teamInfo').each(function (index, value) { var img = this.querySelector('.teamImage').files; var imgFile = this.querySelector('.teamImage').files[0]; if (imgFile != null || imgFile != undefined) { Promise.all(Array.prototype.map.call(img, ReadData)) .then(function (urls) { teamNameImageList.push({ Image: urls[0], TeamNameId: $(value).data("team-name-id") }); console.log(teamNameImageList); }); } }); }); function ReadData(file){ return new Promise(function (resolve) { let reader = new FileReader(); reader.onload = function () { resolve(reader.result); }; reader.readAsDataURL(file); }); } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='teamInfo' data-team-name-id='1'> <input type='file' class='teamImage'/> </div> <div class='teamInfo' data-team-name-id='2'> <input type='file' class='teamImage'/> </div> <button class='save'>Save</button> Aquí está el enlace a mi código. Está en la consola. No estoy seguro de por qué, pero mis arreglos son diferentes... Codepen es ligeramente diferente de mi local 
No estoy seguro de lo que está pasando. Parece que agrega los datos a la matriz para el primero, pero cuando intento recuperar esos datos (como matriz [0]) dice indefinido. ¿Alguna idea de por qué? Esperemos que esto tenga sentido.
En última instancia, estoy tratando de json.stringificar esto pero (mirando la captura de pantalla) solo encadena el [] vacío en lugar de cualquier dato dentro de él. la matriz que quiero usar está atascada en la promesa y no sé cómo sacarla de ahí.