[英]downloadURL state change inside a loop
我正在将一系列o图像上传到Firebase存储,并且需要这些图像的所有URL链接到Firebase数据库中。 这是我到目前为止使用的代码:
var imgArray = []
for (var i=0; i < document.getElementById("myFile").files.length; i++){
var selectedFile = document.getElementById("myFile").files[i];
var selectedStorageRef = firebase.storage().ref(this.estado + "/" + this.cidade + "/" + document.getElementById("nome-do-pico").value + "/" + selectedFile.name);
var uploadTask = selectedStorageRef.put(selectedFile);
uploadTask.on('state_changed', null, null, function (snapshot){
var downloadURL = uploadTask.snapshot.downloadURL;
imgArray.push(downloadURL);
console.log(imgArray);
});
}
这个想法是先将它们全部放在一个数组中,但我总是只得到最后一个URL。 例如,如果我尝试上传3张图片,有时甚至会得到[null,URL,URL]或[null,null,URL]的数组。 我很少获得3个URL,并且在每种情况下它们都是相同的。
也许在downloadURL声明的开头删除var
?
的.put()
方法返回一个承诺,你应该使用的.then()
方法做阵列上的推动。
像这样:
var imgArray = []
for (var i=0; i < document.getElementById("myFile").files.length; i++){
var selectedFile = document.getElementById("myFile").files[i];
var selectedStorageRef = firebase.storage().ref(this.estado + "/" + this.cidade + "/" + document.getElementById("nome-do-pico").value + "/" + selectedFile.name);
var uploadTask = selectedStorageRef.put(selectedFile).then( snapshot => {
var downloadURL = selectedStorageRef.getDownloadURL().then( urlSnap => {
imgArray.push(urlSnap.val());
console.log(imgArray);
});
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.