Я создал форму с помощью 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 Спасибо, чувак! Я никогда не слышал об этом, но когда я смотрю на это, это именно то, что мне нужно. Большое спасибо~
Служба блокировки позволяет скриптам предотвращать одновременный доступ к разделам кода. Это может быть полезно, когда у вас есть несколько пользователей или процессов, изменяющих общий ресурс, и вы хотите предотвратить конфликты.
Служба блокировки имеет три разных метода в зависимости от ограничений, в этом случае вам нужно использовать getScriptLock(), чтобы убедиться, что раздел кода не может выполняться одновременно, независимо от личности пользователя.
Определите свой Lock
предыдущим методом var lock = LockService.getScriptLock();
Определите начало вашего Lock
, есть два разных варианта:
Определите конец вашего Lock
с помощью releaseLock(). Это позволяет другим процессам, ожидающим блокировки, продолжать работу.
(необязательная проверка): hasLock() возвращает false, если
tryLock
или waitLock
никогда не называлисьreleaseLock()
звали
Воспользуйтесь услугой блокировки