如何返回对JSONP请求的即时响应并继续处理

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分钟执行,我可以很容易地达到这个限制.

有没有其他方法可以让这样的解决方案起作用?

Rië*_*iël 1

我会使用“任务”创建属性,并每分钟运行一个触发器,仅检查需要完成的操作。

触发时:

var tasks = SCRIPT_PROP.getProperties() 

for (var key in tasks) {
handleTasks(tasks[key]);
SCRIPT_PROP.deleteProperty(key);
}
Run Code Online (Sandbox Code Playgroud)