Является ли 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.