无法从Firebase存储桶读取文件夹

时间:2020-05-22 16:32:09

标签: reactjs firebase storage bucket

我是React和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;
}

我没有收到任何错误,但是返回字符串为空(除了“ Testing”前缀)。该文件夹有大约20个jpg文件,但似乎看不到它们存在。我在网上做了一些研究,但是我仍然不确定为什么我的代码无法正常工作。请帮我知道为什么这行不通吗?

谢谢

讨厌

1 个答案:

答案 0 :(得分:0)

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

请注意,toReturn最终会 使用该函数调用的结果进行更新。问题在于,此函数的调用者在.then中的任何代码有机会触摸其之前,都会立即收到该数组。

即使诺言立即解决,它上面的代码也已经执行。承诺被排在队列中,其中仅在当前同步代码完成后才执行顶层项目。

getFilesList要做的是返回一个 Promise ,呼叫者随后可以附加该 Promise 以指定其自己的行为:

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))