【问题标题】:How do I call google script triggers every second?如何每秒调用谷歌脚本触发器?
【发布时间】:2020-03-30 08:13:35
【问题描述】:

现实生活中的问题是我想每隔 X 秒调用一次 api,但似乎无法使用 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();

【问题讨论】:

    标签: google-apps-script triggers


    【解决方案1】:

    基于时间的触发器:

    如果您在函数末尾创建触发器,您可以使用方法after(durationMilliseconds) 在指定的毫秒数后调用您的函数,如下所示:

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

    但似乎这种方法(至少目前)不能在不到一分钟后用于触发函数,正如您在 this Issue Tracker case 中看到的那样。

    除此之外,没有可用于您的目的的基于时间的触发器

    解决方法:

    如果您只想在 X 秒后执行一些操作,另一种选择是使用 Utilities.sleep(milliseconds)for 循环。

    当然,您最终会到达 Apps Script execution time limit,因此您应该:

    • 找出在达到此限制之前可以进行多少次迭代。
    • 使每次执行都进行此次数的迭代。
    • 使用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 分钟) , 在回到所需的频率之前。这不是您期望的行为,但我认为这是您可以达到的最接近的行为。

    参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多