Является ли HTML5 localStorage асинхронным?


- Это

2 71

2 ответа:

Неа, все localStorage вызовы являются синхронными.

на самом деле. веб-хранилище больше не является частью основного стандарта HTML5, оно было отделено.

соответствующая (черновик) спецификация может быть найдена здесь и единственное, что вы заметите, это то, что он нигде не упоминает синхронный или асинхронный.

однако анализ текста предполагает, что он должен быть синхронным (мой жирный шрифт):

The setItem(ключ, значение) метод должны сначала проверить, если пара ключ/значение при этом данный ключ уже существует в списке, связанном с объектом.

если это не так, то новая пара ключ / значение должны быть добавлены в список, С указанным ключом и значением стоимости.

если данный ключ существует в списке, и его значение не равно значению, то это должен иметь значение обновляется!--15--> значение. Если ее значение равно значению, то метод должен делать ничего.

в стандартах, такие слова, как must,shall и may нести очень конкретный смысл. Тот факт, что это говорит о том, что метод must do означает, что сам метод должен сделать это, а не откладывать его на некоторое более позднее время.

Это также относится и к здравому смыслу. Если setItem были асинхронными, можно было бы установить элемент в определенное значение, а затем сразу же получить его, получив его предыдущий значение.


здесь и примечание в нижней части раздела интерфейса хранения, которое намекает на возможность асинхронного поведения:

эта спецификация не требует, чтобы вышеуказанные методы ждали, пока данные не будут физически записаны на диск. Требуется только согласованность в том, что видят разные сценарии, обращающиеся к одному и тому же базовому списку пар ключ/значение.

это только с точки зрения того, что записано на долгосрочное хранение. Последнее предложение предписывает, что сценарии, обращающиеся к одному и тому же объекту хранения, должны видеть вещи синхронно.