2013-10-03 3 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 обновляется, когда вы return приложение. Это означает, что любой вызов функции внутри вашей функции не может видеть изменения, внесенные вами в пользовательский интерфейс из одной и той же функции.

Вам нужно будет думать по-другому, то есть, возможно, разделить свой код на 2 функции, чтобы вернуть приложение (другими словами, обновить интерфейс) перед вызовом функции, которая читает его содержимое.


EDIT:, когда я смотрю на ваш код, кажется, что единственное, что вы хотите сделать, прежде чем начать загрузку, чтобы изменить значение текста и атрибут стиля ... если так что вы можете использовать clientHandler, который будет выполняться немедленно (see this other recent post), возможно, это может решить вашу проблему ... сообщите нам, если это произойдет.

Смежные вопросы