Class Lock

Kunci

Representasi kunci pengecualian timbal balik.

Class ini memungkinkan skrip memastikan bahwa hanya satu instance skrip yang mengeksekusi skrip bagian kode pada satu waktu. Ini sangat berguna untuk callback dan pemicu, saat pengguna dapat menyebabkan perubahan pada sumber daya bersama dan Anda ingin memastikan bahwa tidak ada yang berbeda.

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 Gembok, jika dua pengguna mengirimkan formulir pada waktu yang hampir bersamaan, tiket angka bisa berakhir sama, karena properti lastTicketNumber dapat berubah setelahnya dibaca dari ScriptProperties tetapi sebelum nilai baru ditulis kembali.

Metode

MetodeJenis hasil yang ditampilkanDeskripsi singkat
hasLock()BooleanMenampilkan true (benar) jika kunci diperoleh.
releaseLock()voidMelepas kunci, memungkinkan proses lain yang menunggu kunci untuk melanjutkan.
tryLock(timeoutInMillis)BooleanUpaya untuk mendapatkan kunci, waktu habis setelah jumlah milidetik yang diberikan.
waitLock(timeoutInMillis)voidUpaya untuk mendapatkan kunci, waktu habis dengan pengecualian setelah jumlah dalam milidetik.

Dokumentasi mendetail

hasLock()

Menampilkan true (benar) jika kunci diperoleh. 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.');
}

Pulang pergi

Boolean — benar jika kunci didapatkan, salah jika tidak


releaseLock()

Melepas kunci, memungkinkan proses lain yang menunggu kunci untuk melanjutkan. Kuncinya adalah secara otomatis dilepaskan ketika skrip dihentikan, tetapi demi efisiensi, sebaiknya lepaskan segera setelah Anda tidak lagi memerlukan akses eksklusif ke bagian kode. Metode ini tidak berpengaruh jika kunci belum didapatkan.

Perhatikan bahwa jika Anda bekerja dengan {i>spreadsheet<i}, Anda harus memanggil SpreadsheetApp.flush() sebelum melepaskan kunci, untuk melakukan commit terhadap semua perubahan yang tertunda pada {i>spreadsheet<i} sambil tetap memiliki akses eksklusif terhadapnya.

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

tryLock(timeoutInMillis)

Upaya untuk mendapatkan kunci, waktu habis setelah jumlah milidetik yang diberikan. Metode ini tidak akan 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 tunggu untuk mendapatkan kunci, dalam milidetik

Pulang pergi

Boolean — benar jika kunci didapatkan, salah jika tidak


waitLock(timeoutInMillis)

Upaya untuk mendapatkan kunci, waktu habis dengan pengecualian setelah jumlah dalam milidetik. Metode ini sama dengan tryLock(timeoutInMillis), hanya saja metode ini menampilkan pengecualian ketika kunci tidak bisa didapatkan, bukan mengembalikan ke {i>false<i}.

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

Parameter

NamaJenisDeskripsi
timeoutInMillisIntegerberapa lama waktu tunggu untuk mendapatkan kunci, dalam milidetik

Menampilkan

Error — jika waktu tunggu metode habis sebelum kunci diperoleh