Prowler,
вызов функция, переданной в then - это и есть тот момент, когда все картинки загрузились. Это обеспечивается методом Promise.all - он получает массив промисов, ждет когда они все зарезолвятся (или хотя бы один зареджектится, но это не наш случай), и резолвится массивом результатов.
Разумеется, все дальнейшие действия ты можешь делать только внутри функции then, ну или использовать этот промис для построения других конструкций из промисов.
Например, если надо что-то грузить после этих картинок, делай так
getArray(test).then(function(arr) {
return otherGetDataPrimise(arr);
}).then(function(data) {
// здесь data - то что было загружено
});
если параллельно с картинками, то вот так
Promise.all([
getArray(test),
otherGetDataPrimise()
]).then(function(data) {
// data - массив. data[0] - массив картинок, data[1] - данные, полученные otherGetDataPrimise
});
В общем, можно произвольно комбинировать. Ты можешь прямо на листочке нарисовать схему, что и в каком порядке должно грузиться, оформить подгрузку каждой части как отдельную функцию, возвращающую промис, и потом легко и непринужденно собрать из них схему любой сложности. Эта схема опять же будет возвращать промис, который зарезолвится полным набором результатов, и в его then ты выполнишь финальные действия с полученными данными.
Обработку ошибок можно навтыкать по ситуации. getArray из моего предыдущего поста (и функции внутри него) не реджектится, из предположения, что если хотя бы часть картинок загрузилось - "и то хлеб". А если надобно по схеме "все или ничего", то просто реджектишь в reader.onerror, и весь getArray вылетает в ошибку.