ייצוג של נעילת הדדית.
המחלקות האלה מאפשרות לסקריפטים לוודא שרק מופע אחד של הסקריפט יבצע קטע קוד נתון בכל פעם. האפשרות הזו שימושית במיוחד לקריאות חוזרות (callback) ולטריגרים, שבהם פעולת משתמש עשויה לגרום לשינויים במשאב משותף, ואתם רוצים לוודא שלא יהיו התנגשויות.
בדוגמה הבאה אפשר לראות איך משתמשים בנעילה ב-handler של שליחת טופס.
// 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 יכול להשתנות אחרי שהוא נקרא מ-ScriptProperties אבל לפני שהערך החדש נכתב בחזרה.Methods
| שיטה | סוג הערך שמוחזר | תיאור קצר |
|---|---|---|
has | Boolean | הפונקציה מחזירה את הערך true אם הנעילה הושגה. |
release | void | הפונקציה משחררת את הנעילה, ומאפשרת לתהליכים אחרים שממתינים לנעילה להמשיך. |
try | Boolean | הפונקציה מנסה להשיג את הנעילה, ומפסיקה אחרי מספר אלפיות השנייה שצוין. |
wait | void | הפונקציה מנסה לקבל את הנעילה, ומפסיקה עם חריגה אחרי מספר אלפיות השנייה שצוין. |
תיעוד מפורט
hasLock()
הפונקציה מחזירה את הערך true אם הנעילה הושגה. ה-method הזו מחזירה false אם מעולם לא בוצעה קריאה ל-tryLock(timeoutInMillis) או ל-waitLock(timeoutInMillis), אם חלף הזמן הקצוב לתפוס את הנעילה לפני שאפשר היה לאחזר אותה, או אם בוצעה קריאה ל-releaseLock().
const lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
חזרה
Boolean — true אם הנעילה נוספה, false אחרת.
releaseLock()
הפונקציה משחררת את הנעילה, ומאפשרת לתהליכים אחרים שממתינים לנעילה להמשיך. הנעילה משתחררת אוטומטית כשהסקריפט מסתיים, אבל כדי לשפר את היעילות, מומלץ לשחרר אותה ברגע שכבר לא צריך גישה בלעדית לקטע קוד. לשיטה הזו אין השפעה אם הנעילה לא הושגה.
הערה: אם אתם עובדים עם גיליון אלקטרוני, כדאי להפעיל את הפונקציה SpreadsheetApp.flush() לפני שמשחררים את הנעילה, כדי לבצע את כל השינויים שממתינים בגיליון האלקטרוני בזמן שעדיין יש לכם גישה בלעדית אליו.
const lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
tryLock(timeoutInMillis)
הפונקציה מנסה להשיג את הנעילה, ומפסיקה אחרי מספר אלפיות השנייה שצוין. לשיטה הזו אין השפעה אם הנעילה כבר הושגה.
const lock = LockService.getScriptLock(); const success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
פרמטרים
| שם | סוג | תיאור |
|---|---|---|
timeout | Integer | משך ההמתנה עד לקבלת הנעילה, באלפיות שנייה. |
חזרה
Boolean — true אם הנעילה נוספה, false אחרת.
waitLock(timeoutInMillis)
הפונקציה מנסה לקבל את הנעילה, ומפסיקה עם חריגה אחרי מספר אלפיות השנייה שצוין. השיטה הזו זהה לשיטה tryLock(timeoutInMillis), אלא שהיא מציגה חריגה כשהנעילה לא מתבצעת, במקום להחזיר false.
const lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
פרמטרים
| שם | סוג | תיאור |
|---|---|---|
timeout | Integer | משך ההמתנה עד לקבלת הנעילה, באלפיות שנייה. |
מקפיצה את הודעות השגיאה (Throws)
Error – אם חלף הזמן הקצוב לתפוגה של השיטה לפני שההסגר הושג