LockService - 单元格仍在被覆盖
LockService - Cell is still being overwritten
我已经将电子表格绑定脚本设置为处理获取请求的 Web 应用程序。我想防止电子表格覆盖行,这就是我使用 LockService 来防止这种情况的原因。为此,我正在使用 getScriptLock() 方法。
问题是当网络应用程序接收并发请求时,LockService 似乎失败了。我已经像这样设置了我的最小可重现示例:
function doGet(e) {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName("Sheet1");
const randomNumber = Math.round(Math.random() * 100);
const lock = LockService.getScriptLock();
const success = lock.tryLock(10000);
if (success) {
sheet.getRange(sheet.getLastRow() + 1, 1).setValue(randomNumber);
}
SpreadsheetApp.flush();
lock.releaseLock();
return ContentService.createTextOutput("Done");
}
我从一个空白的电子表格开始。它应该在第一列的新行中为每个请求存储一个随机数。为了确保它能很好地同时处理多个请求,我使用网络应用 url 设置了一个电子表格 20 次,并附加了一个递增值的参数。您可以同时打开这些 url,方法是全部选中它们并按键盘上的左 alt + enter。现在并发请求了。
我遇到的问题是单元格被覆盖了。我创建了一个视频来展示行为:https://www.youtube.com/watch?v=G9BiktDnhic
我做错了什么?出于某种原因,运行 SpreadsheetApp.flush()
调用 getScriptLock()
上方的一行似乎可以解决问题。但是……为什么?
The list of urls with an increasing parameter
锁定服务不会阻止单元格被覆盖,它只是阻止并发用户同时运行脚本。
这似乎是 Google Apps 脚本中的错误。该错误已修复。问题可以在这里找到:https://issuetracker.google.com/issues/193051316.
我已经将电子表格绑定脚本设置为处理获取请求的 Web 应用程序。我想防止电子表格覆盖行,这就是我使用 LockService 来防止这种情况的原因。为此,我正在使用 getScriptLock() 方法。
问题是当网络应用程序接收并发请求时,LockService 似乎失败了。我已经像这样设置了我的最小可重现示例:
function doGet(e) {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName("Sheet1");
const randomNumber = Math.round(Math.random() * 100);
const lock = LockService.getScriptLock();
const success = lock.tryLock(10000);
if (success) {
sheet.getRange(sheet.getLastRow() + 1, 1).setValue(randomNumber);
}
SpreadsheetApp.flush();
lock.releaseLock();
return ContentService.createTextOutput("Done");
}
我从一个空白的电子表格开始。它应该在第一列的新行中为每个请求存储一个随机数。为了确保它能很好地同时处理多个请求,我使用网络应用 url 设置了一个电子表格 20 次,并附加了一个递增值的参数。您可以同时打开这些 url,方法是全部选中它们并按键盘上的左 alt + enter。现在并发请求了。
我遇到的问题是单元格被覆盖了。我创建了一个视频来展示行为:https://www.youtube.com/watch?v=G9BiktDnhic
我做错了什么?出于某种原因,运行 SpreadsheetApp.flush()
调用 getScriptLock()
上方的一行似乎可以解决问题。但是……为什么?
The list of urls with an increasing parameter
锁定服务不会阻止单元格被覆盖,它只是阻止并发用户同时运行脚本。
这似乎是 Google Apps 脚本中的错误。该错误已修复。问题可以在这里找到:https://issuetracker.google.com/issues/193051316.