簡體   English   中英

檢查功能是否正在與Google Apps腳本和Google Web Apps一起運行

[英]Check if function is running with Google Apps Script and Google Web Apps

我編寫了一個簡單的Google Apps腳本,該腳本可連接到智能手機上的IFTTT並發送短信。 現在,我正在嘗試通過將腳本部署為Google Web App來開發用戶友好的界面:想法是您應該單擊一個按鈕,然后它應該顯示為“ SMS發送中”,並讓您等待完成。

我認為這需要按鈕代碼來檢查腳本是否正在運行(因此已終止),但是我無法使其正常工作。
這是我的設置。

code.gs中,我具有發送SMS的主要功能:

var isRunning;
function execute() {
 isRunning = true;
 if (checkRunning() == true) {Logger.log('isRunning: TRUE')} else {Logger.log('isRunning: FALSE')}
 OTHER STUFF;
 isRunning = false;
 if (checkRunning() == true) {Logger.log('isRunning: TRUE')} else {Logger.log('isRunning: FALSE')}
}

以及檢查變量isRunningtrue還是false的函數:

function checkRunning() {
  if (isRunning == true) {
    return true}
    else {return false}
}

在我的index.html文件中,有一個按鈕要執行,還有一個按鈕要檢查:

<input class="button" type="button" value="Send SMS" onclick="google.script.run.execute()"/>
<input class="btncheck" type="button" value="Check running"/>

<script></script>之間使用以下代碼(使用Jquery):

var c;
setInterval(function() {google.script.run.withSuccessHandler(varSet).checkRunning()},1000);
function varSet(value) {c = value}

$('.btncheck').on('click', function() {
   alert();
 }); 

function alert() {
   alert(c)
}

我肯定知道execute()函數運行大約15秒鍾。 因此,如果我單擊“執行”按鈕,那么在接下來的幾秒鍾內,我應該能夠單擊“檢查運行”按鈕並輸出true 但是它總是輸出false,因為checkRunning()函數返回false
但是,在腳本Log中, isRunning變量在開始時正確設置為true ,在execute()結束時正確設置為false
任何想法?

我的猜測是,每個客戶端到服務器的調用始終會創建新的執行上下文。 換句話說,除非將變量保存到“穩定”對象(例如電子表格或文件)中,否則不可能在函數調用之間保留變量。 由於google.script.run調用是異步運行的,因此它們會從.gs文件中獲取全局對象的不同實例,因此“ checkRunning()”函數被鎖定在其自己的執行上下文中,並且無法獲取對並行對象的訪問或通信線程。

您可以通過使用CacheService持久化數據並完全擺脫全局變量來解決此限制。 我通過進行以下更改使它起作用

function setIsRunning(value){

  CacheService.getScriptCache().put("isRunning", value.toString());

}

function execute() {

 setIsRunning(true);

  Utilities.sleep(15000); // simulate execution for 15 secs

 setIsRunning(false);

}


function checkRunning() {

var currentState = CacheService.getScriptCache().get("isRunning");

 return (currentState == 'true');
}

請注意,我要返回(currentState =='true')以將String轉換為Boolean。 Boolean('false')將產生true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM