gpt4 book ai didi

javascript - doPost 函数被执行两次(google apps 脚本)

转载 作者:行者123 更新时间:2023-12-04 13:07:31 30 4
gpt4 key购买 nike

我希望得到你的帮助,因为这个问题对我来说是不标准的,我尝试了很多次都没有解决。

问题

我有一个接收 POST 请求的标准函数,她在小批量上稳定工作,示例代码:

let sheet = SpreadSheet.getSheetByName("name")
let dateTime = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyy HH:mm:ss") // Moscow time
<...>
function doPost(e) {
sheet.insertRowBefore(2) // adds a line before the second one
sheet.getRange(2, 1).setValue(e.parameter.par1)
sheet.getRange(2, 2).setValue(dateTime)
sheet.getRange(2, 3).setValue(e.parameter.par2)
sheet.getRange(2, 4).setValue(e.parameter.par3)
sheet.getRange(2, 5).setValue(e.parameter.par4)
}

在表中它看起来像这样:Example

本质上,函数必须同步执行,稳定工作,但是当函数接收到大量请求时(1-10秒140个左右),它可以一次创建两行,同一秒写两次数据排。结果,对于 140 个查询,表中有 ~4 个空行,从中丢失了数据

错误添加的空字符串如下所示:Example

尝试解决

为了防止两个脚本同时运行,我使用了 google apps 脚本中的 LockService 函数,我的代码开始看起来像这样:

let sheet = SpreadSheet.getSheetByName("name")
let dateTime = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyy HH:mm:ss") // Moscow time
var lock = LockService.getScriptLock() // LockService
<...>
function doPost(e) {
if (lock.tryLock(30000)) { // waiting for a queue 30 seconds
sheet.insertRowBefore(2) // adds a line before the second one
sheet.getRange(2, 1).setValue(e.parameter.par1)
sheet.getRange(2, 2).setValue(dateTime)
sheet.getRange(2, 3).setValue(e.parameter.par2)
sheet.getRange(2, 4).setValue(e.parameter.par3)
sheet.getRange(2, 5).setValue(e.parameter.par4)
lock.releaseLock() // unblocking
}
}

我尝试了不同的队列等待时间,但没有成功。函数继续留空行

我请求你的帮助,因为我一直在为这个问题困惑很长时间。该怎么办?我将不胜感激任何信息

最佳答案

请尝试做flush()setValue

之前

关于javascript - doPost 函数被执行两次(google apps 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68700153/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com