И putString
, и getDownloadURL
возвращают обещание, так что вы можете просто всплыть и добавить их в массив для Promise.all
.
uploadImages(images, callBack) {
let promises = [];
for (let index = 0; index < images.length; index++) {
const imagesURI = storage()
.ref("images/")
.child(this.uid())
.child(index + "");
let promise = imagesURI.putString(images, "data_url").then(() => {
return imagesURI.getDownloadURL();
})
promises.push(promise);
}
Promise.all(promises).then(function(urls)
this.uploadedImages = urls;
callBack(this.uploadedImages);
});
}
Обратите внимание, что я сосредоточился только наиспользование обещаний для захвата после завершения загрузки.В коде могут быть и другие ошибки.
Как прокомментировал Берги, вы также можете заменить обратный вызов возвращением обещания:
uploadImages(images, callBack) {
let promises = [];
for (let index = 0; index < images.length; index++) {
const imagesURI = storage()
.ref("images/")
.child(this.uid())
.child(index + "");
let promise = imagesURI.putString(images, "data_url").then(() => {
return imagesURI.getDownloadURL();
})
promises.push(promise);
}
return Promise.all(promises)
}
При этом вы можете вызвать его с помощью:
uploadImages(imageArray).then(function(downloadUrls) {
console.log(downloadUrls);
})