尝试将某些内容保存到 Firebase 实时数据库时出现错误消息

时间:2021-05-27 23:00:47

标签: javascript firebase

所以我尝试将图像上传到 fireabase 存储,并将其添加到具有名称和存储 url 的实时数据库中。我将在此处删除我遇到问题的代码片段。我把星星放在周围是我认为导致我出现此错误消息的原因:Error: Reference.set failed: First argument contains undefined in property 'Pictures.KULT.Link'(KULT 将是 ImgName)。我想知道我做错了什么,我该如何解决?

  ImgName = document.getElementById('namebox').value;
  var uploadTask = firebase.storage().ref("Images/"+ImgName+".png").put(files[0]);

  uploadTask.on("state_changed", function(snapshot){
    var progess = (snapshot.bytesTransferred / snapshot.totalBytes)*100;
    document.getElementById('upProgress').innerHTML = "Upload "+progess+"%";
  },
  
  function(error){
    alert("Det oppsto en feil.")
  },

  function() {
    uploadTask.snapshot.ref.getDownloadURL().then(function(url){
      ImgUrl = url;
    });

    **firebase.database().ref("Pictures/"+ImgName).set({
      Name: ImgName,
      Link: ImgUrl
    });**

    alert("Bildet er lastet opp.");
  });
}```

really appericiate any help <3

1 个答案:

答案 0 :(得分:0)

我相信您的问题是您仅在完成 ​​ImgUrl 函数后才设置 getDownloadUrl

   uploadTask.snapshot.ref.getDownloadURL().then(function(url){
      ImgUrl = url;
    });

...但这是异步的,因此在之后您在下面调用 set 之前不会发生。 ImgUrl 变量将在您进行调用时未定义,因此会出现错误消息。

例如,您可以通过将整个 set 调用移动到 getDownloadUrl() 承诺的处理程序中来解决此问题,例如:

 function() {
    uploadTask.snapshot.ref.getDownloadURL().then(function(url){
      ImgUrl = url;
      firebase.database().ref("Pictures/"+ImgName).set({
        Name: ImgName,
        Link: ImgUrl
      });

      alert("Bildet er lastet opp.");  
    });
  });