Representasi kunci saling-pengecualian.
Class ini memungkinkan skrip memastikan bahwa hanya satu instance skrip yang menjalankan bagian kode tertentu dalam satu waktu. Hal ini sangat berguna untuk callback dan pemicu, saat tindakan pengguna dapat menyebabkan perubahan pada resource bersama dan Anda ingin memastikan tidak ada konflik.
Contoh berikut menunjukkan cara menggunakan kunci di pengendali pengiriman formulir.
// Generates a unique ticket number for every form submission. function onFormSubmit(e) { const targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1); // Gets a script lock before modifying a shared resource. const lock = LockService.getScriptLock(); // Waits for up to 30 seconds for other processes to finish. lock.waitLock(30000); const scriptProperties = PropertiesService.getScriptProperties(); const 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, nomor tiket dapat berakhir sama, karena properti
last Ticket Number
dapat berubah setelah
dibaca dari Script Properties
, tetapi sebelum nilai baru ditulis kembali.Metode
Metode | Jenis hasil yang ditampilkan | Deskripsi singkat |
---|---|---|
has | Boolean | Menampilkan true jika kunci diperoleh. |
release | void | Melepaskan kunci, sehingga proses lain yang menunggu kunci dapat dilanjutkan. |
try | Boolean | Mencoba mendapatkan kunci, waktu tunggu habis setelah jumlah milidetik yang diberikan. |
wait | void | Mencoba mendapatkan kunci, waktu tunggu habis dengan pengecualian setelah jumlah milidetik yang diberikan. |
Dokumentasi mendetail
has Lock()
Menampilkan true jika kunci diperoleh. Metode ini akan menampilkan nilai salah jika try
atau
wait
tidak pernah dipanggil, waktu tunggu habis sebelum kunci dapat diambil, atau jika release
dipanggil.
const lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
Pulang pergi
Boolean
— benar jika kunci diperoleh, salah jika tidak
release Lock()
Melepaskan kunci, sehingga proses lain yang menunggu kunci dapat dilanjutkan. Kunci akan otomatis dilepaskan saat skrip dihentikan, tetapi untuk efisiensi, sebaiknya lepaskan segera setelah Anda tidak lagi memerlukan akses eksklusif ke bagian kode. Metode ini tidak berpengaruh jika kunci belum diperoleh.
Perhatikan bahwa jika Anda menggunakan spreadsheet, Anda harus memanggil SpreadsheetApp.flush() sebelum melepaskan kunci, untuk melakukan semua perubahan yang tertunda ke spreadsheet saat Anda masih memiliki akses eksklusif ke spreadsheet tersebut.
const lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
try Lock(timeoutInMillis)
Mencoba mendapatkan kunci, waktu tunggu habis setelah jumlah milidetik yang diberikan. Metode ini tidak berpengaruh jika kunci telah diperoleh.
const lock = LockService.getScriptLock(); const success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parameter
Nama | Jenis | Deskripsi |
---|---|---|
timeout | Integer | durasi waktu tunggu untuk mendapatkan kunci, dalam milidetik |
Pulang pergi
Boolean
— benar jika kunci diperoleh, salah jika tidak
wait Lock(timeoutInMillis)
Mencoba mendapatkan kunci, waktu tunggu habis dengan pengecualian setelah jumlah
milidetik yang diberikan. Metode ini sama dengan try
, kecuali bahwa metode ini menampilkan pengecualian
saat kunci tidak dapat diperoleh, bukan menampilkan nilai salah (false).
const lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parameter
Nama | Jenis | Deskripsi |
---|---|---|
timeout | Integer | durasi waktu tunggu untuk mendapatkan kunci, dalam milidetik |
Menampilkan
Error
— jika waktu tunggu metode habis sebelum kunci diperoleh