Firebase getDownloadURL来自存储无法设置Img Src

时间:2016-12-26 04:40:50

标签: javascript firebase firebase-storage

我正在尝试复制此问题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,拉出子值,然后进入存储并尝试从那里拉出它们。

1 个答案:

答案 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中所做的那样(videocode)。