Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在多个触发器上存储数组值_Google Apps Script - Fatal编程技术网

Google apps script 在多个触发器上存储数组值

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

我有一个任务需要在一个数组中多次推送数据,这需要15分钟以上,所以我需要在每次5分钟后创建触发器。问题是在新触发后,我的阵列重置为空。我是这样做的:

    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循环中获得的值存储在一个数组中,我可以在将来使用该数组,无论传递了多少个循环,我的数组都不会再次初始化:(.使用缓存服务的属性服务。这就是存储的起点,为什么不使用其他所有内容