Google Drive Javascript API:以递归方式获取所有文件并将它们放入数组中,然后再调用另一个函数

时间:2018-12-01 20:23:47

标签: javascript gapi

我想使用 Google云端硬盘Javascript API 来获取特定文件夹及其子文件夹中的所有视频文件。生成列表后,我想调用另一个函数来格式化和显示数据(这部分工作正常)。

我知道Drive API仅支持搜索直接子级,因此当我遇到文件夹类型时,我必须递归搜索。很好。

我面临的问题是这一切都是异步发生的,在完全填充视频阵列之前,我不想分析或显示任何数据。

仅在对gapi.client.drive.files.list的所有递归调用完成后,才能如何调用函数?

  /**
   * Get all the video files from the parent folder and child folders
   */
  var videos = [];
  function listFiles(parentFolder) {
    gapi.client.drive.files.list({
      'pageSize': 100,
      'fields': "nextPageToken, files(id, name, mimeType, thumbnailLink, createdTime, parents)",
      'supportsTeamDrives': true,
      'orderBy': "createdTime desc",
      'includeTeamDriveItems': true,
      'q': "'" + parentFolder + "' in parents and trashed = false"
    }).then(function(response) {
      var files = response.result.files;
      if (files && files.length > 0) {
        for (var i = 0; i < files.length; i++) {
          var file = files[i];
          if (file.mimeType.includes("video")) {
            videos.push(file);
          } else if (file.mimeType.includes("application/vnd.google-apps.folder")){
            /* This is the recursive call to get child folder videos */
            listFiles(file.id);
        }
      } else {
        appendPre('No files found.');
      }
    }).then(function(response) {
      /* I want to run these only after all recursive calls complete and add videos to videos[] */ 
      updateStats();
      displayVideos();
    });
  }

最佳方法是什么?你能帮我吗? :)

0 个答案:

没有答案