2017-02-27 151 views
1

我设置了一个自定义斜杠命令来将数据存储到Google Spreadsheet中。一切正常完美(脚本被触发并且执行它的魔法),除了响应需要太长时间(超过给定的最大值3000ms)并且Slack会给我一个timeout错误。Google命令返回超时错误的Slack命令

简化谷歌脚本:

function doPost(request) { 

    //// get data from slack payload 
    var params = request.parameters; 

    //// call a function with given parameters 
    custom_function(params); 

    //// 
    var output = {"text":"SUCCESS"}; 

//// respond to slacks POST request 
return ContentService.createTextOutput(JSON.stringify(output)).setMimeType(ContentService.MimeType.JSON); 

} 

结果: 由于对custom_function();长执行时间结束return ContentService. ...来得太晚(过去3000ms时限)=在农闲

timeout错误附加信息:我设置了延迟响应UrlFetchApp.fetch(url,options);的代码custom_function(); - 我正在接收Slack中的响应以及超时错误。

问题:有什么办法可以不必等到custom_function();完成后立即发送一些HTTP 200 OK?在我的情况下,doPost();不需要任何从custom_function返回到完成,所以为什么要等待...?

谢谢!

回答

3

您可以创建基于时间的触发器来运行代码。具体来说,ClockTriggerBuilder的after方法可以在未来运行x毫秒的代码。

https://developers.google.com/apps-script/reference/script/clock-trigger-builder#after(Integer)

function doPost(){ 

//execute the the script function "myFunction" 100 ms in the future 
ScriptApp.newTrigger("myFunction") 
    .timeBased() 
    .after(100) 
    .create(); 

return ContentService.createTextOutput("OK"); 
} 
+0

所以后脚本设置触发,完成代码和x毫秒后,我的custom_function被触发?没想到它那么简单:D ......现在就试试吧!谢谢 ! –

+0

因此,设置触发器就像一个魅力,它实际上触发该功能。唯一的事情是:我将如何将从Slack接收的给定参数传递给该函数?用'Class PropertiesService'? –

+0

谢谢@Spencer Easton!现在它像A +一样工作!在将所有值存储到PropertyService时,我需要使用'JSON.stringify'和'JSON.parse',但是嘿...它工作:) –