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
Metode | Jenis hasil yang ditampilkan | Deskripsi singkat |
---|---|---|
hasLock() | Boolean | Menampilkan nilai benar jika kunci didapatkan. |
releaseLock() | void | Melepaskan kunci, sehingga proses lain yang menunggu kunci dilanjutkan. |
tryLock(timeoutInMillis) | Boolean | Berupaya mendapatkan penguncian, waktunya habis setelah jumlah milidetik yang diberikan. |
waitLock(timeoutInMillis) | void | Berupaya 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
Nama | Jenis | Deskripsi |
---|---|---|
timeoutInMillis | Integer | berapa 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
Nama | Jenis | Deskripsi |
---|---|---|
timeoutInMillis | Integer | berapa lama waktu menunggu untuk mendapatkan kunci, dalam milidetik |
Menampilkan
Error
— jika waktu metode habis sebelum kunci diperoleh