Показать сообщение отдельно
  #5 (permalink)  
Старый 07.04.2017, 09:54
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

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 вылетает в ошибку.
Ответить с цитированием