Множественная отправка в одно и то же время в Google App Script

Я создал форму с помощью Google App Script и отправил все данные в Google Spreadsheet.

Мой код GS:

function doGet(e){
  return HtmlService.createTemplateFromFile("Form1");
}

мой html-код - это просто простой тег ввода, и всякий раз, когда пользователи отправляют его, он будет добавлять строку в таблицу Google.

Вот мой код:

function executeProgram(agentSub){
  var ss = SpreadsheetApp.openByUrl(url);
  var sheet = ss.getSheetByName("Submission");

  var timeStamp = new Date();
  sheet.appendRow([timeStamp,name,age]);
}

Теперь код работает нормально, если форму отправляет только один человек. Но если 2 человека отправят его одновременно, будет создана только 1 строка вместо 2. Похоже, что вторая перекрывается с первой. Но если второй человек отправил 1 секунду после первого человека, код работает нормально (создано 2 строки). Что мне здесь не хватает, и как это решить?

Спасибо!

Воспользуйтесь услугой блокировки

Cooper 23.12.2020 09:01

@Cooper Спасибо, чувак! Я никогда не слышал об этом, но когда я смотрю на это, это именно то, что мне нужно. Большое спасибо~

Poppy 23.12.2020 14:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
547
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечать

Служба блокировки позволяет скриптам предотвращать одновременный доступ к разделам кода. Это может быть полезно, когда у вас есть несколько пользователей или процессов, изменяющих общий ресурс, и вы хотите предотвратить конфликты.

Служба блокировки имеет три разных метода в зависимости от ограничений, в этом случае вам нужно использовать getScriptLock(), чтобы убедиться, что раздел кода не может выполняться одновременно, независимо от личности пользователя.

Шаг за шагом

  • Определите свой Lock предыдущим методом var lock = LockService.getScriptLock();

  • Определите начало вашего Lock, есть два разных варианта:

    • tryLock(timeoutInMillis) возвращает false, если блокировка не была получена, иначе true.
    • waitLock(timeoutInMillis) генерирует исключение, если блокировка не может быть получена
  • Определите конец вашего Lock с помощью releaseLock(). Это позволяет другим процессам, ожидающим блокировки, продолжать работу.

  • (необязательная проверка): hasLock() возвращает false, если

    • замок не был получен
    • tryLock или waitLock никогда не назывались
    • время истекло до того, как блокировка может быть восстановлена
    • releaseLock() звали

Другие вопросы по теме