Class Lock

Kunci

Representasi kunci pengecualian bersama.

Class ini memungkinkan skrip memastikan bahwa hanya ada satu instance skrip yang mengeksekusi bagian kode tertentu pada satu waktu. Hal ini sangat berguna untuk callback dan pemicu, saat tindakan pengguna dapat menyebabkan perubahan pada resource bersama dan Anda ingin memastikan bahwa tidak ada benturan.

Contoh berikut menunjukkan cara menggunakan kunci di pengendali pengiriman formulir.

// Generates a unique ticket number for every form submission.
function onFormSubmit(e) {
  var targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1);

  // Gets a script lock before modifying a shared resource.
  var lock = LockService.getScriptLock();
  // Waits for up to 30 seconds for other processes to finish.
  lock.waitLock(30000);

  var ticketNumber = Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
  ScriptProperties.setProperty('lastTicketNumber', ticketNumber);

  // Releases the lock so that other processes can continue.
  lock.releaseLock();

  targetCell.setValue(ticketNumber);
}
Tanpa layanan Lock, jika dua pengguna mengirimkan formulir pada waktu yang hampir bersamaan, jumlah tiket dapat berakhir sama, karena properti lastTicketNumber dapat berubah setelah dibaca dari ScriptProperties, tetapi sebelum nilai baru ditulis kembali.

Metode

MetodeJenis hasil yang ditampilkanDeskripsi singkat
hasLock()BooleanMenampilkan nilai benar jika kunci didapatkan.
releaseLock()voidMelepaskan kunci, sehingga proses lain yang menunggu kunci dilanjutkan.
tryLock(timeoutInMillis)BooleanBerupaya mendapatkan penguncian, waktunya habis setelah jumlah milidetik yang diberikan.
waitLock(timeoutInMillis)voidBerupaya mendapatkan kunci, mengatur waktu habis dengan pengecualian setelah jumlah milidetik yang diberikan.

Dokumentasi mendetail

hasLock()

Menampilkan nilai benar jika kunci didapatkan. Metode ini akan menampilkan nilai salah jika tryLock(timeoutInMillis) atau waitLock(timeoutInMillis) tidak pernah dipanggil, waktu habis sebelum kunci dapat diambil, atau jika releaseLock() dipanggil.

var lock = LockService.getScriptLock();
lock.tryLock(10000);
if (!lock.hasLock()) {
  Logger.log('Could not obtain lock after 10 seconds.');
}

Return

Boolean — true jika smart lock diperoleh, false jika tidak


releaseLock()

Melepaskan kunci, sehingga proses lain yang menunggu kunci dilanjutkan. Kunci akan otomatis dirilis saat skrip dihentikan, tetapi untuk efisiensi, sebaiknya lepaskan segera setelah Anda tidak lagi memerlukan akses eksklusif ke suatu bagian kode. Metode ini tidak akan berpengaruh jika kunci belum diperoleh.

Perhatikan bahwa jika bekerja dengan spreadsheet, Anda harus memanggil SpreadsheetApp.flush() sebelum melepaskan kunci, untuk melakukan semua perubahan tertunda ke spreadsheet saat Anda masih memiliki akses eksklusif ke spreadsheet.

var lock = LockService.getScriptLock();
lock.waitLock(10000);
// Do some work on a shared resource.
lock.releaseLock();

tryLock(timeoutInMillis)

Berupaya mendapatkan penguncian, waktunya habis setelah jumlah milidetik yang diberikan. Metode ini tidak berpengaruh jika kunci telah diperoleh.

var lock = LockService.getScriptLock();
var success = lock.tryLock(10000);
if (!success) {
  Logger.log('Could not obtain lock after 10 seconds.');
}

Parameter

NamaJenisDeskripsi
timeoutInMillisIntegerberapa lama waktu menunggu untuk mendapatkan kunci, dalam milidetik

Return

Boolean — true jika smart lock diperoleh, false jika tidak


waitLock(timeoutInMillis)

Berupaya mendapatkan kunci, mengatur waktu habis dengan pengecualian setelah jumlah milidetik yang diberikan. Metode ini sama dengan tryLock(timeoutInMillis), tetapi metode ini menampilkan pengecualian saat kunci tidak dapat diperoleh, bukan menampilkan nilai salah.

var lock = LockService.getScriptLock();
try {
  lock.waitLock(10000);
} catch (e) {
  Logger.log('Could not obtain lock after 10 seconds.');
}

Parameter

NamaJenisDeskripsi
timeoutInMillisIntegerberapa lama waktu menunggu untuk mendapatkan kunci, dalam milidetik

Menampilkan

Error — jika waktu metode habis sebelum kunci diperoleh