无法从firebase存储桶中读取文件夹。

问题描述 投票:0回答:1

我是反应和firebase的新手。我试图从firebase存储桶中的一个特定文件夹中获取一串文件名(目前只是作为一个连续的字符串)。我的代码如下。

getFilesList(){
    var toReturn="";
    toReturn+="Testing";
    var storage = firebase.app().storage(".....");
    var storageRef = storage.ref();
    var listRef = storageRef.child("/slides/1HdDPbTarLBxzllDlA3H/Lecture1/");
    listRef.listAll().then(function(result) {
    result.items.forEach(function(imageRef) {
    toReturn+=this.getImageString(imageRef);
  });
}).catch(function(error) {
  toReturn+="error1";
});

    return toReturn;
}
getImageString(imageRef) {
    var toReturn="T1";
  imageRef.getDownloadURL().then(function(url) {
    var toReturn=url.toString();
  }).catch(function(error) {
    toReturn+="error2";
  });
  return toReturn;
}

我没有得到任何错误,但返回的字符串是空白的(除了 "测试 "前缀)。该文件夹有大约20个jpg文件,但它似乎没有看到它们在那里。我在网上做了一些研究,但我还是不知道为什么我的代码不能用。请帮我了解一下为什么不能用?

谢谢你的帮助。

贾里德

reactjs firebase storage bucket
1个回答
0
投票

这不是你的框架的问题,而是异步代码的问题。

请看 toReturn最终 更新该函数调用的结果。问题是,这个函数的调用者立即接收到了数组,而不是在 .then 有机会接触它。

即使承诺瞬间解析,它上面的代码也会已经执行。承诺会被放在一个队列中,只有在当前同步代码完成后,上面的项目才会执行。

什么是 getFilesList 需要做的是返回一个 承诺 然后,调用者可以附加到它上面,以指定自己的行为。

getFilesList(){
    var toReturn="";
    toReturn+="Testing";
    var storage = firebase.app().storage(".....");
    var storageRef = storage.ref();
    var listRef = storageRef.child("/slides/1HdDPbTarLBxzllDlA3H/Lecture1/");
    listRef.listAll().then(function(result) {
        result.items.forEach(function(imageRef) {
            toReturn+=this.getImageString(imageRef);
        });
        return toReturn;
     }).catch(function(error) {
         toReturn+="error1";
         return toReturn;
     });

而在调用者中,

getFilesList.then(filesList => console.log(filesList))
© www.soinside.com 2019 - 2024. All rights reserved.