«Исключение: у этого скрипта слишком много триггеров» при создании временного триггера. - PullRequest
1 голос
/ 16 июня 2020

Привет, я новичок в Google Apps Script. Я получил сообщение об ошибке:

Исключение: в этом скрипте слишком много триггеров.

Хотя у меня есть только 1 триггер, а именно:

ScriptApp.newTrigger("Status()").timeBased().atDate(2021, 2, 1).create();

Я на самом деле думаю об использовании большего количества триггеров, управляемых по времени, но я попробовал 1, и у него есть эта ошибка. Вы хоть представляете, что происходит?


При запуске веб-приложения всегда создаются новые триггеры. Есть ли способ сохранить триггеры, не создавая еще один при посещении веб-приложения?

1 Ответ

1 голос
/ 16 июня 2020

Проблема

Установка нового триггера при каждом открытии веб-приложения.

Обеспечение установки только одного экземпляра триггера

Пример ниже представляет собой служебную программу для проверки того, установлен ли уже устанавливаемый триггер или его необходимо установить. Настройте его по своему вкусу и запускайте каждый раз, когда веб-приложение открывается с помощью триггера doGet.

/**
 * @summary gets or installs a trigger
 * @param {string} callbackName
 * @param {GoogleAppsScript.Script.EventType} type
 * @param {function} installer
 */
const getOrIntallTrigger = (callbackName, type, installer) =>

    /**
     * @returns {?GoogleAppsScript.Script.Trigger}
     */
    () => {

        console.log(`Checking for triggered ${callbackName} function`);

        const ss = SpreadsheetApp.getActiveSpreadsheet();

        const triggers = ScriptApp.getUserTriggers(ss);

        const found = triggers
            .filter(trigger => trigger.getEventType() === type && trigger.getHandlerFunction() === callbackName);

        const [trigger] = found;

        !trigger && installer();

        return trigger;
    };

Примечания

  1. Чтобы это работало , вам необходимо иметь время выполнения V8 и быть комфортным с синтаксисом ES6 .
...