Загружайте изображения в том же порядке, что и файлы - PullRequest
0 голосов
/ 23 мая 2019

Я работаю с Firebase Storage.В ведре у меня есть несколько файлов изображений и listfile.txt со списком всех файлов.Что мне нужно сделать, это загрузить изображения и поместить их в массив в том же порядке, что и файлы, перечисленные в listfile.txt.

. У меня возникают проблемы, так как getDownloadURL () асинхронный, а изображениязагружаются в случайном порядке в массив overlay.

var files=[];
var mapRef=[];
var overlay=[];

var listMapsRef = storageRef.child(prefix+"/listfile.txt");
listMapsRef.getDownloadURL().then(function(url) {
    $.get(url, function(txt){
        files = txt.split("\n");
        for (var i = 0; i < files.length; i++) {
            mapRef.push(storageRef.child(files[i]));
            .....
            .....
        }
        count = mapRef.length;
        mapRef.forEach(function(oneMap) {
                oneMap.getDownloadURL().then(function(url){
                ovl=loadImage(url);
                overlay.push(ovl);
                if (!--count) {
                    startMyApp();
                    }
                });
            });

    }); //.get
});  //.then

1 Ответ

0 голосов
/ 28 мая 2019

Сделайте что-то вроде этого псевдокода

function loadImage(url) {
  return new Promsie((resolve, reject) => {
    fetch(url, (data, err) => {
       if (err) reject(err);
       else resolve(data);
    })
  });
}

const overlay = await Promise.all(
    mapRef.map(
        oneMap => oneMap
            .getDownloadURL()
            .then(url => loadImage(url)
    )
);
...