繁体   English   中英

在一个循环内下载URL状态更改

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM