Google Scripts: как вызвать функцию для запуска после завершения другой функции - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть скрипт Google с 4 различными функциями, которые нужно запускать одну за другой, но функцию можно запустить сразу после того, как предыдущая закончена / завершена.

Время, которое занимает каждая функция, зависит, но в среднем каждая функция занимает около 15-20 минут.

Каждая функция заполняет электронную таблицу с большим количеством данных, поэтому я хочу запустить первую функцию, дождаться окончания первой, запустить вторую и т. Д. Внутри триггера, чтобы загрузить информацию каждый (например) 4 ч.

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

В общем случае, чтобы запустить функцию A после функции B, один пишет подпрограмму контроллера, которая сначала вызывает один, а затем вызывает другой:

function a() { /* stuff */ }
function b() { /* other stuff */ }
function doStuff() {
  a();
  b();
}

В вашем случае, когда у вас есть ограничение по времени выполнения, которое в противном случае могло бы привести к остановке выполнения одной из ваших функций и препятствовало бы запуску остальных, вам нужно написать процедуру планирования, в которой используются сценарии приложений ScriptApp класс . У вас есть несколько способов сделать это, от планирования первого с помощью заданного интервала триггера и использования каждой функции, чтобы сообщить Google , когда следует запускать следующую функцию, вместо для запуска Следующая функция или использование свойства сценария для указания следующей функции, которая должна быть запущена, для ручного запуска одной и установки последней для вызова первой.

Пример цепочки:

function a() {
  ...
  // Google will run b() within +/-15 minutes of the indicated time
  // Schedule it for 16 minutes from now, so we know a() has
  // completed and shut down before b runs.
  var next = ScriptApp.newTrigger("b").timeBased();
  next.after(16 * 60 * 1000).create();
}
function b(e) {
  /* Add code to delete the one-time trigger used to call this function
  (The trigger uid is in the event object e) */
  ...

Метод собственности:

function doStuff() {
  var props = PropertiesService().getScriptProperties();
  var next;
  switch (props.getProperty("runNext")) {
    case "a":
      a();
      next = "b";
      break;
    ...
  }
  props.setProperty("runNext", next);
}
function a() {...}
...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...