【发布时间】:2020-05-29 03:16:49
【问题描述】:
我正在创建一个博客网站,并且正在编写按顺序执行以下操作的代码:
1。存储用户上传的多张照片
2。下载他们的网址
3。将它们保存到实时数据库中。
我编写了下面的函数来执行 #1 和 #2。基本上这个想法是将所有 url 存储到一个数组中,在本例中为 'urlarray'。
function url_array_get(){
return new Promise(function(resolve,reject){
let filez=review_photo.files;
let urlarray=[];
let user=firebase.auth().currentUser;
let files=Array.from(filez);
files.forEach(function(file) {
let storageRef=firebase.storage().ref('data/'+user.uid+'/posts/'+file.name);
storageRef.put(file).then(function(snapshot){
snapshot.ref.getDownloadURL().then(function(url) {
urlarray.push(url);
})
})
});
if (!urlarray){
reject("oops");
}
else {
resolve(urlarray);
}
});
}
这是上传函数代码的一部分,它将所有相关数据上传到数据库,包括上面函数中的 promise 返回的 URL 数组。 (我省略了其余代码以使案例简洁)
let userpostRef=firebase.database().ref('posts/');
let newpostRef=userpostRef.push();
newpostRef.set({
userid: user.uid,
post_target: rtarget,
post_content:rtext,
time: firebase.database.ServerValue.TIMESTAMP
}).then(function(){
url_array_get().then(function(result){
newpostRef.once('value', function(snapshot) {
newpostRef.update({
postnum:snapshot.key,
photolink:result
})
})})}).
then(function(){
alert("Upload successful!");
window.location.href='/'+username;
})
.catch(function(error){
alert("Error!");
});
}
问题是:代码会将除“photolink”之外的所有内容写入数据库,“photolink”应该是 URL 数组。
这是我在调试时发现的:
-照片存储没有任何问题。
为每个文件下载-urls,并按预期在执行代码中成功返回urlarray。
可能出了什么问题?我在这里迷路了。任何建议都会非常受欢迎。
非常感谢!
【问题讨论】:
标签: javascript firebase firebase-realtime-database firebase-storage es6-promise