Google apps script 在多个触发器上存储数组值
我有一个任务需要在一个数组中多次推送数据,这需要15分钟以上,所以我需要在每次5分钟后创建触发器。问题是在新触发后,我的阵列重置为空。我是这样做的:Google apps script 在多个触发器上存储数组值,google-apps-script,Google Apps Script,我有一个任务需要在一个数组中多次推送数据,这需要15分钟以上,所以我需要在每次5分钟后创建触发器。问题是在新触发后,我的阵列重置为空。我是这样做的: var x = [] ; function main () { var startTime = new Date().getTime(); var scriptProperties = PropertiesService.getScriptProperties(); var start = parseInt(scriptPropertie
var x = [] ;
function main () {
var startTime = new Date().getTime();
var scriptProperties = PropertiesService.getScriptProperties();
var start = parseInt(scriptProperties.getProperty('start'));
for ( var i = start ; i<= 1000; i++) {
var currentTime = new Date().getTime();
if (currentTime - startTime >= 250000)
{
scriptProperties.setProperty('start',i);
ScriptApp.newTrigger('main')
.timeBased()
.after(1000)
.create();
}
else {
x.push(i); // this takes more than 15 mins for example, so It need about 3 trigger to complete
}
}
Logger.log('return values of array x ' + x); // it's not return from 0-1000 as I want , it's just return values that pushed in the most recent trigger, ex : from 900-1000
}
var x=[];
函数main(){
var startTime=new Date().getTime();
var scriptProperties=PropertiesService.getScriptProperties();
var start=parseInt(scriptProperties.getProperty('start'));
对于(变量i=开始;i=250000)
{
scriptProperties.setProperty('start',i);
ScriptApp.newTrigger('main')
.基于时间的()
.之后(1000)
.create();
}
否则{
x、 推(i);//例如,这需要15分钟以上,因此需要大约3个触发器才能完成
}
}
Logger.log('数组x'+x的返回值);//它不是像我所希望的那样从0-1000返回,它只是返回最近触发的值,例如:从900-1000
}
解决方案来自提问用户,并发布在评论上:
是的,我解决了这个问题,将数组字符串化并保存在属性中,在取出时使用Json.parse
这是独立脚本吗?它不会保存到属性中吗?你能详细介绍一下吗?对不起,我对这个问题很生疏,我不太理解你的问题。是的,它没有保存到属性中。每次新触发器启动时,x阵列都会变为空。据我所知,如果我全局声明变量,当trigger运行main函数时,它不会影响以前推送到x数组中的数据,但它似乎不是这样工作的。问题是,每次调用函数
var x=[]
时,所有其他全局变量都会被初始化。事实上,只要你调用任何函数。您最好告诉我们您正在尝试做什么,也许我们可以建议一种更快的方法来实现您的目标。@Cooper我尝试做的是将从for循环中获得的值存储在一个数组中,我可以在将来使用该数组,无论传递了多少个循环,我的数组都不会再次初始化:(.使用缓存服务的属性服务。这就是存储的起点,为什么不使用其他所有内容