Representasi kunci eksklusif bersama.
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, ketika tindakan pengguna dapat menyebabkan perubahan pada resource bersama dan Anda ingin memastikan tidak ada konflik.
Contoh berikut menunjukkan cara menggunakan kunci dalam 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); }
lastTicketNumber dapat berubah setelah dibaca dari ScriptProperties, tetapi sebelum nilai baru ditulis kembali.Metode
| Metode | Jenis nilai 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, dengan waktu tunggu habis setelah jumlah milidetik yang diberikan. |
wait | void | Mencoba mendapatkan kunci, yang akan berakhir dengan pengecualian setelah jumlah milidetik yang diberikan. |
Dokumentasi mendetail
hasLock()
Menampilkan true jika kunci diperoleh. Metode ini menampilkan false jika tryLock(timeoutInMillis) atau waitLock(timeoutInMillis) tidak pernah dipanggil, waktunya habis sebelum kunci dapat diambil,
atau jika releaseLock() dipanggil.
const lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
Pulang pergi
Boolean — true jika kunci diperoleh, false jika tidak.
releaseLock()
Melepaskan kunci, sehingga proses lain yang menunggu kunci dapat dilanjutkan. Kunci akan dilepaskan secara otomatis saat skrip berakhir, tetapi untuk efisiensi, sebaiknya lepaskan kunci segera setelah Anda tidak lagi memerlukan akses eksklusif ke bagian kode. Metode ini tidak berpengaruh jika kunci belum diperoleh.
Perhatikan bahwa jika Anda sedang mengerjakan spreadsheet, Anda harus memanggil SpreadsheetApp.flush() sebelum melepaskan kunci, untuk melakukan semua perubahan yang tertunda pada 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();
tryLock(timeoutInMillis)
Mencoba mendapatkan kunci, dengan waktu tunggu habis setelah jumlah milidetik yang diberikan. Metode ini tidak berpengaruh jika kunci sudah 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 tunggu untuk mendapatkan kunci, dalam milidetik. |
Pulang pergi
Boolean — true jika kunci diperoleh, false jika tidak.
waitLock(timeoutInMillis)
Mencoba mendapatkan kunci, yang akan berakhir dengan pengecualian setelah jumlah milidetik yang diberikan. Metode ini sama dengan tryLock(timeoutInMillis), tetapi menampilkan pengecualian
jika kunci tidak dapat diperoleh, bukan menampilkan 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 tunggu untuk mendapatkan kunci, dalam milidetik. |
Menampilkan
Error — jika waktu tunggu metode habis sebelum kunci diperoleh