Как получить непрерывный вывод (индикатор выполнения) в Google script

#html #google-apps-script #web-applications

Вопрос:

Я пытаюсь получить непрерывный вывод из сценария Google, чтобы пользователь мог видеть ход выполнения сценария. Мне не нужен графический вывод, простого счетчика должно быть достаточно. Я пытаюсь с

 function provando() {
  var i = 0;
  do {
    i   ;
    var riga = "Valore di i: " i;
    var finestra = HtmlService
    .createHtmlOutput(riga)
    .setTitle("Progresso")
    .setWidth(300)
    .setHeight(75);
    SpreadsheetApp.getActiveSpreadsheet().show(finestra);    
    // Utilities.sleep (500)
  } while (i < 20);
}
 

и проблема в том, что переменная «рига» выводится только в конце цикла.
Есть ли способ получить непрерывный выход?

Комментарии:

1. Проблема с тем, что вы пытаетесь сделать, заключается в том, что вы заставите пользователя ждать еще дольше, просто чтобы отобразить глупый счетчик, который на самом деле не говорит им, что Джек. И вы не можете использовать обратный отсчет, потому что вы никогда не знаете, сколько времени что-то займет, потому что это зависит от множества факторов. Поэтому я бы рекомендовал не тратить на это ваше время. Это плохая идея. Я часто помещаю желтый фон в диалоговые окна, и когда функция завершается, она возвращает фон в нормальное состояние, просто чтобы позволить пользователю теперь, когда поездка туда и обратно от клиента к серверу и обратно завершена.

2. Привет, Рубен, я понимаю, что ты говоришь, но дело в том, что при работе с классом пользователю приходится ждать очень долго (для создания 100 классов требуется 20-30 минут), поэтому счетчик должен быть полезен.

3. Если бы я хотел, чтобы пользователь знал, что он все еще работает, я бы, вероятно, использовал toast() его, но я бы не хотел тратить много времени на отображение содержимого. Двадцать или тридцать минут-это довольно много времени, вы ознакомились с лучшими практиками

4. Привет, МетаМан, это занимает так много времени, потому что класс работает очень медленно; для создания одного класса вручную из веб-интерфейса требуется от 30 до 45 секунд.

Ответ №1:

Почему бы не сделать это:

 let n = 0;
//begin creating classrooms and increment n after every creation 
SpreadsheetApp.getActive().toast(`Classrooms: ${n}`);
 

Это не так много дополнительного кода, и он позволяет всем знать, что он все еще работает, и теперь, когда вы закончите, вы узнаете, сколько классов вы создали.

 let n = number of classrooms your going to create and then decrement.
 

Комментарии:

1. Я собираюсь попробовать, спасибо.

2. Да, ваше решение соответствует моим потребностям. Большое спасибо.