javascript - 如何等待所有数据下载到Firebase(Firestore)存储中?

标签 javascript firebase vue.js google-cloud-firestore firebase-storage

我正在使用 Firestore 和 Storage 在 Vue 中制作一个轻型仪表板。我不是专业人士,所以我陷入了一些本应简单的事情中。我有一个函数应该根据文件名获取所有 URL(这就是存储的工作原理)

getImages: function(uid, images) {        
    images.forEach((filename) => {
        var ref = firebaseApp.storage().ref('images/' + uid + "/" + filename);
        ref.getDownloadURL().then(function(url) {   
          this.finalImages.push(url)
          console.log(url);
        }).catch(function(error) {
          switch (error.code) {
            case 'storage/object_not_found':
              // File doesn't exist
              console.log('Object not found');
              break;

            case 'storage/unauthorized':
              // User doesn't have permission to access the object
              console.log('You do not have the right permissions');
              break;

            case 'storage/canceled':
              // User canceled the upload
              console.log('Canceled');
              break;

            case 'storage/unknown':
              // Unknown error occurred, inspect the server response
              console.log('Who knows...');
              break;
          }
        })
    })
  }

但是 URL 在代码完成后下载,所以我从来没有看到它们。如何停止一切并等待 URL 出现在 finalImages 数组中然后继续?

最佳答案

您可以将每个请求映射到一个 promise ,然后等待所有 promise 完成:

getImages: function(uid, images) {        
  Promise.all(images.map((filename) => {
    return new Promise((resolve, reject) => {
      var ref = firebaseApp.storage().ref('images/' + uid + "/" + filename);
      ref.getDownloadURL().then(function(url) {
        resolve(url);
      }).catch(function(error) {
        // Uncomment this line to ignore errors.
        reject(error);
        switch (error.code) {
          case 'storage/object_not_found':
            // File doesn't exist
            console.log('Object not found');
            break;

          case 'storage/unauthorized':
            // User doesn't have permission to access the object
            console.log('You do not have the right permissions');
            break;

          case 'storage/canceled':
            // User canceled the upload
            console.log('Canceled');
            break;

          case 'storage/unknown':
            // Unknown error occurred, inspect the server response
            console.log('Who knows...');
            break;
        }
      })
    });
  })).then((finalImages) => {
    // all images.
  })
}

关于javascript - 如何等待所有数据下载到Firebase(Firestore)存储中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51007999/

相关文章:

javascript - 使用 JavaScript 的 UIWebView CSS 注入(inject)

javascript - 动画 jQuery UI 可拖动元素回到起始位置

Firebase功能如何搜索实时数据库

javascript - 从 Vue.JS 中的函数渲染 JSX

javascript - 如何根据复选框汇总值

javascript - 如何动态检查在文本框中输入的数字?

javascript - 如何计算两个时间的差异?一个在 firebase 中,一个是当前时间

android - Firebase实时数据库数组查询问题

vue.js - 动态创建组件总是删除最后一个实例

javascript - 指定需要的环境变量