Как я могу вызвать триггеры скрипта Google каждую секунду? - PullRequest
0 голосов
/ 30 марта 2020

Реальная проблема заключается в том, что я хочу вызывать api каждые X секунд и, кажется, не могу sh выполнить его с помощью скриптов Google.

Как я знаю, вы можете вызывать триггер через каждые 1, 5 10, 15 или 30 минут. Есть ли способ запускать скрипт Google каждую секунду?

  function createTimeDrivenTriggers() {
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .everyMinutes(1) //I can not write 0.01 instead of 1 here. 
      .create();
}

function myFunction() {
  Logger.log("Logging");
}

createTimeDrivenTriggers();

1 Ответ

1 голос
/ 30 марта 2020

Триггеры, основанные на времени:

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

function myFunction() {
  Logger.log("Logging");
  ScriptApp.newTrigger("myFunction")
  .timeBased()
  .after(1000 * X) // Fire "myFunction" after X seconds
  .create();
}

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

Кроме этого, не существует триггера, основанного на времени, который можно использовать для вашей цели .

Обходной путь:

Другой вариант, если вы просто хотите выполнить некоторые действия через X секунд, будет использовать Utilities.sleep (миллисекунды) и for l oop.

Конечно, вы в конечном итоге достигнете Apps Script ограничение по времени выполнения , и по этой причине вам следует:

  • Узнать, сколько итераций вы можете выполнить до достижение этого предела.
  • Сделайте, чтобы каждое выполнение делало это число итераций.
  • Создайте триггер, который будет запускать вашу функцию через определенное время, с after(durationMilliseconds).

Это может быть что-то похожее на это:

function myFunction() {
  var numIterations = 10; // Number of iterations before reaching time limit (change accordingly)
  for (var i = 0; i < numIterations; i++) {
    // Your actions
    Utilities.sleep(1000 * X); // Pause execution for X seconds
  }
  ScriptApp.newTrigger("myFunction")
  .timeBased()
  .after(1000 * Y) // Fire "myFunction" after Y seconds
  .create();
}

Таким образом, вы можете большую часть времени сохранять желаемую частоту, и только по достижении лимита времени исполнения (каждые 6 или каждые 30 минут, в зависимости от вашей учетной записи) эта частота будет однажды ниже (около 1 минуты), прежде чем вернуться к желаемой частоте. Это не то поведение, которого вы ожидаете, но я думаю, что оно ближе всего к нему.

Ссылка:

...