2013-10-03 157 views
0

難以讓GAS按我需要的順序執行功能。在此代碼中:Google Apps腳本執行順序

function documentUpload(e) { 
    var app = UiApp.getActiveApplication(); 
    app.getElementById('documentValue').setText('Uploaded'); 
    app.getElementById('documentValueLabel').setStyleAttribute('color', 'black'); 
    checkSubmit(e); 
    return app; 
} 

...它總是在更改文本之前運行checkSubmit。這是無用的,因爲checkSubmit檢查的內容之一是documentValue是否有文本。

我看到this post並嘗試添加類似的LockService如此:

function documentUpload(e) { 
    var app = UiApp.getActiveApplication(); 
    app.getElementById('documentValue').setText('Uploaded'); 
    app.getElementById('documentValueLabel').setStyleAttribute('color', 'black'); 
    var lock = LockService.getPrivateLock(); 
    lock.waitLock(10000); 
    checkSubmit(e); 
    lock.releaseLock(); 
    return app; 
} 

...但我沒有得到任何不同的結果。對於Utilities.sleep()同樣的事情。

在此先感謝您的任何建議!

回答

0

當您的返回應用程序時,界面被更新。這意味着函數內部的任何函數調用都無法從同一個函數中看到您對UI進行的更改。

你必須以不同的方式思考,也就是說,在調用讀取其內容的函數之前,可能會將代碼拆分爲2個函數以允許返回應用程序(換句話說就是更新UI)。


編輯:,當我看着你的代碼似乎要開始下載前做的唯一一件事就是更改文本值和樣式屬性......如果是這樣,你可以使用clientHandler會立即執行(see this other recent post)也許這可以解決您的問題...讓我們知道如果它。