我正在尝试复制此问题here的结果。我可以在有效的数据库子项上调用getDownloadURL()
,但它返回的结果似乎无法设置为IMG src
。
这是我目前用来尝试获取下载URL的代码:
var storage = firebase.storage();
var storageRef = storage.ref();
var imgRef = storageRef.child('profile-pictures/1.jpg');
var pulledProfileImage = imgRef.getDownloadURL();
然后我执行此操作将pulledProfileImage
推送到数组中:
dataArray.push(pulledProfileImage)
将数组(以及其他信息)发送到用数据填充表的函数。这里使用此代码引用图像本身:
cell1.innerHTML = '<img id="profileImage" src="'+dataArray[0]+'">';
在代码执行后检查源代码时,src
设置为[Object, Object]
。我也有脚本记录结果,当它这样做时,看起来像这样:
0:C
Hc:false
N:2
Pa:null
Wb:false
ja:null
na:"https://firebasestorage.googleapis.com/v0/b/app-name-da7a1.appspot.com/..."
s:null
奇怪的是,如果我让控制台通过调用Wb
从上面的列表打印出一个不同的属性,console.log(Array[0].Wb)
,它会完美地打印false
....每个布尔值似乎很好,只是没有字符串或数字。
作为参考,我的存储结构如下所示:
----root
|
|------profile-pictures
|---------------------- img1.png <--the console is trying to print this one
|
|---------------------- img2.png
我的数据库结构找到要拉的图像的名称是这样的:
----root
|
|----folder1
|
|
|----subfolder1
|
|
|----subfolder2
|
|
|--------img1.png
|
|--------img2.png
基本上我的代码导航到子文件夹2,拉出子值,然后进入存储并尝试从那里拉出它们。
答案 0 :(得分:3)
这里的诀窍是getDownloadURL
是异步函数,恰好返回一个promise(按照the docs):
var storage = firebase.storage();
var storageRef = storage.ref();
var imgRef = storageRef.child('profile-pictures/1.jpg');
// call .then() on the promise returned to get the value
imgRef.getDownloadURL().then(function(url) {
var pulledProfileImage = url;
dataArray.push(pulledProfileImage);
});
这将在本地工作,但该列表不会在所有浏览器中同步。相反,您想要的是使用数据库来同步URL,就像我们在Zero To App中所做的那样(video,code)。