Javascript Google应用程序脚本中的Google Drive REST API v2文件属性数组未定义?
我正在使用谷歌应用程序脚本管理一些谷歌硬盘文件。这个项目的一部分是检查文件的属性,所以我使用的是驱动器API而不是DriveApp。此外,Google Apps脚本目前可以访问而不是v3 我已成功设置属性(id),并能够使用该属性集提取文件Javascript Google应用程序脚本中的Google Drive REST API v2文件属性数组未定义?,javascript,google-apps-script,google-drive-api,Javascript,Google Apps Script,Google Drive Api,我正在使用谷歌应用程序脚本管理一些谷歌硬盘文件。这个项目的一部分是检查文件的属性,所以我使用的是驱动器API而不是DriveApp。此外,Google Apps脚本目前可以访问而不是v3 我已成功设置属性(id),并能够使用该属性集提取文件 console = Logger; function Files (folderId) { var optionalArgs,response ; optionalArgs = { q:'"'+folderId+'" in parents
console = Logger;
function Files (folderId) {
var optionalArgs,response
;
optionalArgs = {
q:'"'+folderId+'" in parents',
spaces:"drive"
}
do {
response = Drive.Files.list(optionalArgs);
response.items.forEach(function (file) {
console.log(file.properties);
var id = file.properties.find(function (property) {
return property.key === 'id';
});
this[id.value] = file;
},this);
} while (optionalArgs.pageToken = response.nextPageToken);
}
运行此函数时,我可以在日志中看到文件属性
[{可见性=公共,种类=驱动器#属性,etag=“3gjdstzy841rscmbo4ir-DLlp20/hgzjl78t8i2eiehialagxtkm2-C4”,值=9e18766b-1cc9-4c1b-8003-b241f43db304,键=id}]
但是得到
TypeError:无法调用未定义的方法“find”
我无法遍历这个结果数组。在其上使用JSON.parse会尝试将其转换为对象,这对于具有多个属性的文件是有问题的。对其使用JSON.parse(JSON.stringify())会导致
SyntaxError:意外标记:u
据我所知,这是由于该值未定义造成的。如果我的日志没有告诉我其他情况,我可以使用它。“下一页获取(字符串)下一页文件的页面标记。如果已到达文件列表的末尾,则此标记将不存在。”
引自:
因此,此行为optionalArgs.pageToken分配了一个未定义的值
while (optionalArgs.pageToken = response.nextPageToken);
并且不会终止循环。更好的方法是在循环内分配optionalArgs.pageToken的值,如果其值未定义,则中断循环,如下所示:
console = Logger;
function Files (folderId) {
var optionalArgs,response
;
optionalArgs = {
q:'"'+folderId+'" in parents',
spaces:"drive"
}
do {
response = Drive.Files.list(optionalArgs);
response.items.forEach(function (file) {
console.log(file.properties);
var id = file.properties.find(function (property) {
return property.key === 'id';
});
this[id.value] = file;
},this);
// Assign the value inside the loop
optionalArgs.pageToken = response.nextPageToken
} while (optionalArgs.pageToken != undefined) // check to see if it undefined here and break the loop.
}
通过在“高级谷歌服务”选项中选择版本,可以在谷歌应用程序脚本中使用v3: 只需注意,您必须遵循如何在GoogleDriveV3中请求,但您仍然可以使用v2,因为所有示例仍然在v2中 关于您的错误,请在的示例代码中使用它们的代码
函数listRootFolders(){
var query='父级中的“根”,trashed=false和'+
'mimeType=“application/vnd.google apps.folder”';
var文件夹,pageToken;
做{
文件夹=Drive.Files.list({
问:质疑,,
最大结果:100,
pageToken:pageToken
});
如果(folders.items&&folders.items.length>0){
对于(var i=0;i
您还可以阅读上述文档的更多代码实现
希望这能有所帮助。我很欣赏更为公认的赋值方法,但这不是我遇到的问题。此外,它确实会在预期的情况下终止循环。
function listRootFolders() {
var query = '"root" in parents and trashed = false and ' +
'mimeType = "application/vnd.google-apps.folder"';
var folders, pageToken;
do {
folders = Drive.Files.list({
q: query,
maxResults: 100,
pageToken: pageToken
});
if (folders.items && folders.items.length > 0) {
for (var i = 0; i < folders.items.length; i++) {
var folder = folders.items[i];
Logger.log('%s (ID: %s)', folder.title, folder.id);
}
} else {
Logger.log('No folders found.');
}
pageToken = folders.nextPageToken;
} while (pageToken);
}