Я получаю zip-файл с изображениями и csv-файлами от пользователя.Мне нужно распаковать эти файлы и загрузить их в Firestore.Когда я загружаю изображения, я также хочу сохранить путь для загрузки изображения в объект изображения, который я нажимаю позже.Я хочу сохранить идентификаторы всех объектов изображения, которые я нажимаю, и сохранить их в терминальном объекте.Я хочу подождать, пока все мои файлы будут загружены, прежде чем вызывать некоторые другие функции.
Моя функция вызывается непосредственно перед заполнением моего termObj.Я попытался сохранить обещания и подождать, пока все они не разрешатся, но обещание. Все выполняются немедленно (он не ожидает заполнения обещаний в цикле for)
Как мне ждать всех моихфайлы, которые должны быть загружены и имеют заполненный termObj, прежде чем я вызову this.printDone ()?
async fileChanged(event) {
const file = event.target.files[0];
const self = this;
let promises= [];
let termObj = {
all_images: [],
};
this.zipService.getEntries(file).subscribe( (next) => {
for (const ent of next) {
let filename : string = ent.filename;
const fileType = filename.slice(filename.indexOf("."));
this.zipService.getData(ent).data.subscribe(async function(val) {
let blobFile = new File([val], filename);
self.task = self.storage.upload(self.authService.getUser() + "/" +filename, blobFile);
if( fileType === '.jpg' || fileType === '.jpeg' || fileType === '.png'){
let pathToFile = self.authService.getUser() + '/' + filename;
// URL
await firebase.storage().ref().child( pathToFile ).getDownloadURL().then(function (url) {
let imageObj = {
downloadURL: url,
};
const imagePromise = self.db.collection('images').add(imageObj).then(function(ref){
termObj.all_images.push(ref.id);
console.log(termObj);
});
promises.push(imagePromise);
});
}
}); // end of unzip service that gets data from zipped entry
} // end of for loop looping through files
}); //gets entries from zipped file
await Promise.all(promises).then(()=>{
this.printDone();
console.log(termObj.all_images);
});
} // конец метода
============= Редактировать ========== перемещение оператора await Promise.all сразу после окончания цикла for и затем console.log termObj.all_images дает мне тот же результат.
вывод console.log (termObj.all_images)