Индикатор процентной загрузки, который представляет состояние обработки функции или потока - PullRequest
0 голосов
/ 30 мая 2020

Проблема: Когда функция вызывается, всплывающее окно Google говорит: «Выполняется скрипт, blahblah» с кнопками отмены, закрытия. Это зеленое всплывающее окно закрывается через некоторое время (когда?), Но во многих ячейках по-прежнему отображается состояние Загрузка .., а значения все еще заполняются, что означает, что функции все еще выполняются.

Требование: Нужна информация о каком-то индикаторе, вращающемся круге / загрузочном интерфейсе или просто о простом процентном указании того, сколько обработки / вызовов функций было выполнено, или о чем-то, что дает пользователю некоторое представление о том, сколько осталось загрузки или когда она отделка. Я понимаю, что говорю расплывчато, потому что не уверен, существует ли такая функция мониторинга процесса. Я визуализирую это как монитор потоков, который становится зеленым после завершения всей обработки. Но ячейка, заполненная значением 0-100%, также подойдет.

Контекст: Когда я нажимаю кнопку, мой код выполняет множество функций в широком диапазоне ячеек, которые требуют значительного времени обработки даже с оптимизацией, во время которой состояние многих ячеек остается как «Загрузка ..». Только после того, как все функции выполнены и все ячейки заполнены, пользователю необходимо выполнить некоторую ручную проверку / другие действия. Но пользователю не дается никаких указаний о том, что вся обработка завершена, кроме ручной прокрутки и поиска отсутствия индикатора «Загрузка» во всех ячейках, что утомительно.

Альтернативные решения (в случае, если нет функции индикатора прямой обработки):

  1. Обратный вызов или возврат некоторого значения для каждой функции и проверка, все ли они прибыли (я чувствую, это невыполнимо, потому что количество раз одна функция должна быть выполнена изменения с указанным пользователем вводом, например: пользователь дает 3 ввода, функция выполняется для 300 ячеек. Также, как объяснялось ранее, состояние заполнения / загрузки ячеек происходит даже после очевидного завершения выполнения функции)
  2. Функция сканирования страницы для отображения значения ячейки "Загрузка .." и, если нет, указывает, что загрузка была завершена (эта функция не работает должным образом, я предполагаю некоторые проблемы с синхронизацией c) Я знаю, что это наиболее реальный вариант, но я действительно с нетерпением ждал какой-то ценности / функции ion, который автоматически сообщает мне, что обработка завершена.

Я не думаю, что для этого требуется фрагмент кода, поскольку я в основном спрашиваю, существует ли конкретная функция или нет. Если нет, будут оценены альтернативы.

1 Ответ

2 голосов
/ 30 мая 2020

Самый простой подход - отобразить значок загрузки после нажатия кнопки. Моя рекомендация - это что-то вроде Materialise CSS.

Я предполагаю, что есть 2 файла:

  1. Front-End HTML, который содержит View
  2. Файл сценария серверных приложений, который содержит контроллер

Итак, в вашем файле №1 вы должны добавить следующую полосу загрузки:

<!-- this is your existing button -->
<button id="yourTriggerButton">Click here</button>

<!-- in your css file, add #loadingBar{display:none} so that is hidden by default -->
<div class="progress" id="loadingBar">
  <div class="indeterminate"></div>
</div>

// we can also add some output message here
<div id="outputDiv"></div>

И внизу ваш интерфейсный файл, в теге script мы заявляем, что хотим показать элемент загрузки, когда нажата кнопка (и ваш внутренний скрипт запущен), и скрыть его после завершения процесса:

const triggerButton = document.getElementById("yourTriggerButton");  
const loadingElement = document.getElementById("loadingBar");
const outputElement = document.getElementById("outputDiv");   

triggerButton.addEventListener( "click", function(e){
  // lets show the loading icon when clicked
  loadingElement.style.display = "block";
  google.script.run
    .withSuccessHandler(handleSuccess)
    .backEndFunction()

  // this is called once backEndFunction is finished / returned
  function handleSuccess( returnValueFromBackEnd ){
    // lets hide the loading icon
    loadingElement.style.display = "none";
    // and show the user some feedback
    outputElement.innerText = "Done processing…"; // or you can input something that is returned from the back-end function
  }

});
...