Является ли функция setItem(key,value)
асинхронной?
localStorage.setItem("key",someText);
Является ли функция setItem(key,value)
асинхронной?
localStorage.setItem("key",someText);
Нет, все вызовы localStorage
являются синхронными.
На самом деле. веб-хранилище больше не является частью основного стандарта HTML5, оно отделяется.
Соответствующая (черновик) спецификация может быть найдена здесь, и одна вещь, которую вы заметите, это то, что она не упоминает синхронный или асинхронный нигде.
Однако анализ текста предположил бы, что он должен быть синхронным (мой смелый):
Метод setItem (ключ, значение) должен сначала проверить, существует ли пара ключей/значений с заданным ключом в списке, связанном с объектом.
Если это не так, то новая пара ключей/значений должна быть добавлена в список с заданным ключом и с его значением, установленным в значение.
Если данный ключ существует в списке, а его значение не равно значению, то значение должно быть обновлено значением. Если его предыдущее значение равно значению, то метод ничего не должен делать.
В стандартах слова типа must
, shall
и may
несут очень специфические значения. Тот факт, что он говорит о том, что должен сделать этот метод, означает, что сам метод должен это сделать, а не отложить его до более позднего времени.
Это также относится к здравому смыслу. Если setItem
были асинхронными, можно было бы установить элемент в определенное значение, а затем сразу получить его, получив предыдущее значение.
В нижней части раздела интерфейса хранения есть примечание, в котором намекает на возможность асинхронного поведения:
Эта спецификация не требует, чтобы указанные выше методы подождали, пока данные будут физически записаны на диск. Требуется только согласованность в том, какие разные скрипты, получающие доступ к одному и тому же базовому списку пар ключ/значение, необходимы.
Однако это только в терминах того, что написано для длительного хранения. В последнем предложении указано, что скрипты, обращающиеся к одному и тому же объекту хранилища, обязаны видеть вещи синхронно.