我设置了一个自定义斜杠命令来将数据存储到Google电子表格中。一切运作完美(脚本被触发并发挥其魔力)除了响应时间太长(超过给定的最大值3000ms)并且Slack会抛出timeout
错误。
简化的Google脚本:
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. ...
来得太晚(过去3000毫秒时限)= timeout
错误
其他信息:我使用代码UrlFetchApp.fetch(url,options);
设置了custom_function();
的延迟回复 - 我在Slack中收到了这些响应以及超时错误。
问题:有什么方法我不得不等到custom_function();
完成并立即发送一些HTTP 200 OK
?在我的情况下,doPost();
并不需要custom_function
中的任何内容以换取结束,为什么要等待......?
感谢!
答案 0 :(得分: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");
}