我编写了以下Google Apps脚本功能,并设置了每日项目触发器,以删除空的Gmail标签:
function removeEmptyGmailLabels() {
// retrieve all labels
var labels = GmailApp.getUserLabels();
for (var i = 0; i < labels.length; i++) {
// loop over excluded labels and skip them
for (var j = 0; j < excluded.length; j++) {
if (labels[i].getName() != excluded[j]) {
// Utilities.sleep(1000)
// retrieve all threads per label
var threads = labels[i].getThreads();
// determine if label contains no threads
if (threads == "") {
// delete empty label
labels[i].deleteLabel();
}
}
}
}
}
此函数会产生以下错误:
从上面的代码中可以看出,我尝试添加Utilities.sleep(1000)
但是再次对其进行了评论,因为它没有解决错误。
如何正确使用Utilities.sleep(1000)
?
答案 0 :(得分:1)
Utilities.sleep(1000)对你帮助不大,因为传递的时间以毫秒为单位。所以你只是让你的功能睡了1秒钟。并且取决于labels
,excluded
的长度以及每个标签与之相关的线程数,这取决于您调用服务的次数。
我还会尝试放置语句来测试它在代码中不同位置的效果。特别是尝试将它放在'labels [i] .getThreads()'语句之后。它会在获取线程和删除标签之间放一秒钟。
仔细查看代码,您的功能似乎不太高效。由于if (labels[i].getName() != excluded[j])
遍历代码的其余部分,因此excluded
的所有值都与labels[i]
不匹配。因此,如果excluded
中有10个值,则for循环中包含的代码仍将针对labels[i]
不匹配的其他9个值运行。因此,您的“排除”标签仍将最终被删除。我宁愿尝试这样的事情:
for (var i = 0; i < labels.length; i++) {
var flag = true;
for (var j = 0; j < excluded.length; j++) {
if (labels[i].getName() == excluded[j]) {
flag = false;
}
}
if (flag == true) //Deletes only if there is no match in exceptions
{
//Checks only to see whether its empty
if (labels[i].getThreads() == "") {
labels[i].deleteLabel();
}
}
}
尝试这样做,看看是否会降低您的号码。我认为你现在不需要Utilities.sleep(1000)
。