Cra*_*aig 9 javascript jsonp function google-apps-script google-spreadsheet-api
我正在使用JSONP从用户收集数据,但不要求用户获得响应.
因此,我希望向用户发送即时响应,以便他们可以继续而无需等待服务器处理.
如何向他们发送回复但继续处理?
我正在使用谷歌脚本,但我想任何javascript方式返回响应并继续处理也应该工作.
我有类似的东西:
function handleResponse(e) {
//do something with e
return ContentService
.createTextOutput('console.log("updated")')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
Run Code Online (Sandbox Code Playgroud)
我想返回响应,然后"用e做一些事情".
编辑:好的经过大量的捣乱我有一个半工作的解决方案(总是有路障!)
目前我有:
var SCRIPT_PROP = PropertiesService.getScriptProperties();
function doGet(e){
SCRIPT_PROP.setProperty("myParameters", e.parameters);
ScriptApp.newTrigger("handleResponse")
.timeBased()
.after(20 * 1000)
.create();
return ContentService
.createTextOutput('console.log("processing")')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
function handleResponse() {
Logger.log(SCRIPT_PROP.getProperty("myParameters"));
}
Run Code Online (Sandbox Code Playgroud)
它正在做的是将数据从用户保存到类似全局的变量.然后它设置一个触发器,在20秒后执行handleResponse()函数.最后它向用户返回一些内容,因此他们不必等待handleResponse()函数完成.
现在我遇到这个解决方案时遇到的问题,它似乎是命中和错过,它有时会触发handleResponse()函数,有时候永远不会这样做.
从文档中可以看出触发器将在您指定的时间执行+/- 15分钟!现在,在它运作的时代,我已经看到它需要10秒到45秒.在没有工作的时候,我等了20分钟,但仍然没有.似乎我设置触发器的时间越短,它从未执行的次数就越多.
我遇到的另一个问题是我一次只能有14个触发器,所以如果他们决定花15分钟执行,我可以很容易地达到这个限制.
有没有其他方法可以让这样的解决方案起作用?
我会使用“任务”创建属性,并每分钟运行一个触发器,仅检查需要完成的操作。
触发时:
var tasks = SCRIPT_PROP.getProperties()
for (var key in tasks) {
handleTasks(tasks[key]);
SCRIPT_PROP.deleteProperty(key);
}
Run Code Online (Sandbox Code Playgroud)