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); }
lastTicketNumber
dapat berubah setelahnya
dibaca dari ScriptProperties
tetapi sebelum nilai baru ditulis kembali.Metode
Metode | Jenis hasil yang ditampilkan | Deskripsi singkat |
---|---|---|
hasLock() | Boolean | Menampilkan true (benar) jika kunci diperoleh. |
releaseLock() | void | Melepas kunci, memungkinkan proses lain yang menunggu kunci untuk melanjutkan. |
tryLock(timeoutInMillis) | Boolean | Upaya untuk mendapatkan kunci, waktu habis setelah jumlah milidetik yang diberikan. |
waitLock(timeoutInMillis) | void | Upaya 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
Nama | Jenis | Deskripsi |
---|---|---|
timeoutInMillis | Integer | berapa 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
Nama | Jenis | Deskripsi |
---|---|---|
timeoutInMillis | Integer | berapa lama waktu tunggu untuk mendapatkan kunci, dalam milidetik |
Menampilkan
Error
— jika waktu tunggu metode habis sebelum kunci diperoleh