google-apps-script - 如何解决谷歌应用脚本超时问题
问题描述
我的谷歌应用脚本在特定时间后停止工作。以下代码更改文件权限。在我的文件夹中有大约 10K 个文件。当我在更改 1~2K 文件共享权限脚本停止工作后运行脚本时。有没有办法解决这个问题?
function myFunction() {
var folderId = "ID";
var files = DriveApp.getFolderById(folderId).getFiles();
var result = [];
while (files.hasNext()) {
var file = files.next();
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
var temp = {
file_name: file.getName(),
url: "http://drive.google.com/uc?export=view&id=" + file.getId(),
};
result.push(temp);
};
}
解决方案
有几种解决方法,从升级您的帐户到授予对更长超时的访问权限,您还可以使脚本与缓存服务一起使用并存储超时之前的迭代状态,然后使用存储在缓存中的此值再次运行脚本.
虽然,所有这一切都可能与您尝试做的事情有很大关系:云端硬盘的权限具有继承性。这是什么意思?这意味着,如果您更改任何文件夹的权限设置,您将覆盖该文件夹上每个文件的权限。
总之,您真的不需要对所有文件进行任何迭代,更改该文件夹的权限就完成了。
更改文件夹权限及其所有包含文件的工作代码:
function myFunction() {
var folder = DriveApp.getFolderById("YOUR_FOLDER_ID");
folder.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
}
这可行,但由于您的文件夹中的大量文件传播可能需要一些时间,最多几个小时,请耐心等待明天检查。
推荐阅读
- mysql - 基于多列删除重复项
- javascript - 在浏览器模式下无法滚动到页面顶部
- angular - 在 Angular 中使用 Protobuf-net .proto 模式
- laravel - Laravel Route 存在于 artisan route:list 但不在路由文件中
- python-3.x - Python3 Simple_Salesforce
- c# - 无法过滤掉包含计算机对象的 OU
- java - 将 spring-security 与 spring-webflux 一起使用时禁用 WebSession 创建
- apache - GET请求中的JMeter变量失败
- redux - 用 Jest 测试一个调度 2 个其他函数的 Redux 操作?
- mysql - mysql 1215 无法添加外键约束