2017-02-27 186 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',但是嘿...它工作:) –