Я пытался отладить проблему, при которой я записываю несколько новых строк (через несколько HTTP GET) в электронную таблицу Google с помощью GAS, но они, похоже, не смогли получить блокировку после того, как некоторые из них были написаны. Изначально у меня был тайм-аут до 5000 мс (5 секунд), что должно было быть достаточно времени для одного вызова, но я заметил, что если мне нужно было добавить 20 строк, этот тайм-аут приводил к сбою случайных обновлений строк. Когда я переместил время на 30 сек c, тогда 20 строк работали нормально. Но если я перешел к 60 рядам, я снова получал случайные неудачи. Перемещение на 60 сек. c тайм-аут, похоже, работал.
Похоже, что этот тайм-аут эффективно должен учитывать совокупное время, которое потребуется для записи всех строк. Чем больше я думаю об этом, я думаю, что это имеет смысл, поскольку я делаю эти вызовы из проекта flutter / web с помощью метода asyn c. Приведенный ниже код дротика для HTTP GET ...
void submitOrder(String orderParms) async {
try {
String fullURL = "$URL$orderParms";
await http.get(fullURL).then((response) {
callback(convert.jsonDecode(response.body)['status']);
});
} catch (e) {
print(e);
}
}
Метод GAS doGet ниже ...
function doGet(request){
var prodID = "1qNt0Q-not-K37U-the-Ea8Fa-real-ynUF-url-xwskYfmDgnMEw2lX_LFblSuDw";
var result = {"status": "SUCCESS"};
try {
// Get all Parameters
var lastName = request.parameter.lastName;
var firstName = request.parameter.firstName;
var lock = LockService.getUserLock();
if (lock.tryLock(60000)) { // currently using 60 sec to be safe??
// Open the correct sheetGoogle Sheet using ID
var sheet_prod = SpreadsheetApp.openById(prodID);
var rowData = sheet_prod.appendRow([lastName, firstName]);
// Need to flush these updates so they fully take before releasing the lock
SpreadsheetApp.flush();
// ok, done important spreadsheet stuff, release the lock
lock.releaseLock();
// else did not get a lock
} else {
result = {"status": "FAILED - No Lock!", "message": "Lock timed out"};
}
} catch(exc){
result = {"status": "Exception! FAILED", "message": exc.message};
}
// Return result
return ContentService
.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
В настоящее время у меня установлен тайм-аут 60 секунд, чтобы я мог обрабатывать вроде 30-40 рядов без сбоев, чтобы получился замок. Есть ли вред в установке такого высокого тайм-аута? Любые идеи очень ценятся !!