我還沒有找到關于這個問題的帖子。我不清楚鎖定服務在使用 UrlFetchApp 寫入電子表格時的作用。
我問的是防止問題 - 而不是當前正在發生的問題(我不知道如何充分模擬)。是否應該將 Lock Service 與 UrlFetchApp“put”方法一起使用以寫入 Google 電子表格,以防止同一腳本的近乎并發用戶覆寫?如果是這樣,基本代碼語法是否正確,如下所述?
第二個問題:我看不到 UrlFetch 的“SpreadsheetApp.flush()”型別命令在釋放鎖定之前應用所有待處理的電子表格更改的選項。UrlFetchApp 是否確保在回傳之前完成所有作業表更改?
同樣,現在使用 UrlFetchApp 寫入電子表格沒有問題——問題是關于通過近乎并發的代碼執行來防止資料丟失或覆寫。
var lock = LockService.getScriptLock();
try {
lock.waitLock(15000); // wait 15 seconds for others' use of the code section and
lock to stop and then proceed
} catch (e) {
Logger.log('Could not obtain lock after 15 seconds.');
return "Error: Server busy try again later."
}
var url= `https://sheets.googleapis.com/v4/spreadsheets/${ssID}/values/${postRange}?valueInputOption=RAW`;
var options = {
muteHttpExceptions: true,
contentType: 'application/json',
method: 'put',
payload: JSON.stringify(data), data
headers: { Authorization: 'Bearer ' clientToken }
};
var response= UrlFetchApp.fetch(url,options);
lock.releaseLock();
// END - end lock here
uj5u.com熱心網友回復:
- LockService本身的使用似乎適合您的代碼。您也可以根據自己的喜好考慮使用tryLock而不是。
waitLock - 如果您沒有特定的理由不這樣做,我建議您使用電子表格服務或高級表格服務,而不是使用
UrlFetchApp. 它會簡化你的代碼。 - 回傳時
UrlFetchApp,API 請求已完成。到那時應該已經完成??了所有作業表的更改。如果您想在進行更新的同一腳本中使用更新的資料,則重繪 僅在 Apps Script 服務的背景關系中才有意義,因為腳本可能在其結束之前不會應用電子表格更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/449483.html
上一篇:谷歌表上傳到GCS按鈕
下一篇:從WebApp讀取訊息
