我想使用 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();
});
}
最佳方法是什么?你能帮我吗? :)