Чи setItem(key,value)функція асинхронна?
localStorage.setItem("key",someText);
Чи setItem(key,value)функція асинхронна?
localStorage.setItem("key",someText);
Відповіді:
Ні, всі localStorageдзвінки синхронні.
nbfабо expз нею.
Насправді. веб-сховище вже не є частиною основного стандарту HTML5, його розділено.
Відповідний (проект) специфікації можна знайти тут , і одна річ , яку ви помітите, що це не кажучи вже про синхронної або асинхронної де - небудь.
Однак аналіз тексту дозволяє припустити, що він повинен бути синхронним (моїй жирним шрифтом):
Метод setItem (ключ, значення) повинен спочатку перевірити, чи пара / ключ / значення з даним ключем вже існує у списку, пов’язаному з об'єктом.
Якщо цього не відбувається, то до списку потрібно додати нову пару ключ / значення , із заданим ключем та його значенням.
Якщо даний список існує в списку, а його значення не дорівнює значенню, то це повинно бути оновлене до значення. Якщо його попереднє значення дорівнює значенню, то метод не повинен нічого робити.
У стандартах, такі слова , як must, shallі mayносити дуже конкретні значення. Той факт, що це говорить про те, що повинен робити метод , означає, що сам метод повинен це робити, а не відкладати на якийсь більш пізній час.
Це також відповідає здоровому глузду. ЯкщоsetItem асинхронні, можна було б встановити елемент на певне значення, а потім негайно отримати його, отримавши його попереднє значення.
там є примітка в нижній частині секції інтерфейсу зберігання , який натякає на можливість асинхронного поведінки:
Ця специфікація не вимагає, щоб вищезазначені методи чекали, поки дані фізично не будуть записані на диск. Потрібна лише узгодженість того, що бачать різні сценарії, що отримують доступ до одного і того ж базового списку пар ключів / значень.
Однак це лише з точки зору того, що записано на довготривале зберігання. Останнє речення передбачає, що сценарії, що звертаються до одного об’єкта зберігання, потрібні для того, щоб бачити речі синхронно.
LocalStorage. Коли я зберігаю 10 предметів, я пропускаю 3 з них. Я дійсно вважаю, що це асинхронно, але як перевірити, чи це було зроблено. куди мені додати зворотній дзвінок?
must, shall, mayкоментар вище RFC2119 ietf.org/rfc/rfc2119.txt
На це питання вже відповіли. Для всіх, хто в майбутньому прийде до цього, javascript синхронний за своєю природою. Речі є лише асинхронізованими, тому вони визначені для цього. Через це ви можете припустити, що всі речі є синхронними, якщо вони не визначені як асинхронні. Це з JavaScript, а не рамки, написані на Javascript. Вони часом порушують цю практику. Як і NodeJs.