所以我尝试将图像上传到 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
答案 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.");
});
});