HTML5 localStorage는 비동기식입니까?


답변:


157

아니요, 모든 localStorage호출은 동기식입니다.


5
내 원래 소스는 Mozilla localstorage 문서 였지만 그 이후로 수정 된 것 같습니다 (W3 사양은 어디서나 동기화 / 비 동기화를 요구하지 않는 것 같습니다). 이 시점에서 나는 localstorage 호출이 규칙에 따라 동 기적이지만 사양이 아니라고 말하고 싶습니다. 비동기로 구현 된 브라우저를 알지 못한다면?
Ryan Nigro

36
내 문제는 로컬 저장소에 인증 토큰을 설정 한 다음 사용자를 다른보기로 리디렉션한다는 것입니다. 때때로 새 뷰 액세스 로컬 저장소에서 토큰이 아직 저장되지 않았 음을 발견하므로 시간 제한을 사용해야하지만 여전히 100 % 신뢰할 수 없습니다.
머핀 맨

@TheMuffinMan는 : 귀하의 문제는 아마 관련이 nbf또는 exp정식 토큰에서.
Mendes

3
나를 위해 같은, 이상한 물건
patotoma

나는 똑같은 문제에 직면하고있다. 그것은 이상한 행동이다.
Daniel T. Sobrosa

62

사실은. 웹 저장소는 더 이상 HTML5 핵심 표준의 일부가 아니며 분리되었습니다.

관련 (초안) 사양은 여기 에서 찾을 수 있으며 눈에 띄는 점은 어디에서나 동기 또는 비동기를 언급하지 않는다는 것입니다.

그러나 텍스트를 분석하면 동기식이어야 함을 알 수 있습니다 (내 굵은 글씨).

setItem (키 값)에있어서 소정 키의 키 / 값 쌍 이미 오브젝트와 연관된 목록에 있는지 먼저 확인해야한다.

그렇지 않은 경우 지정된 키와 값을 value로 설정하여 새 키 / 값 쌍 을 목록에 추가해야합니다 .

주어진 키가 목록에 존재하고 그 값이 값과 같지 않다면 그 값을 값으로 업데이트 해야합니다. 이전 값이 value와 같으면 메서드는 아무 작업도 수행하지 않아야합니다.

표준에서 must, shall와 같은 단어 may매우 구체적인 의미를 가지고 있습니다. 메서드 가 무엇을해야하는지에 대해 이야기하고 있다는 사실 은 메서드 자체가 그것을해야한다는 것을 의미하며, 나중에 그것을 미루는 것이 아닙니다.

이것은 또한 상식에 따릅니다. (가) 경우 setItem비동기했다, 이전 값을 받고, 그것을 바로 다음 특정 값에 대한 항목을 설정 검색 할 수있을 것이다.


입니다 비동기 행동의 가능성을 암시 저장 인터페이스 섹션 하단의주의 사항 :

이 사양에서는 데이터가 물리적으로 디스크에 기록 될 때까지 위의 방법이 대기 할 필요가 없습니다. 동일한 기본 키 / 값 쌍 목록에 액세스하는 다른 스크립트의 일관성 만 필요합니다.

그러나 이는 장기 저장에 기록되는 내용에 국한됩니다. 마지막 문장은 동일한 스토리지 객체에 액세스하는 스크립트가 동기식으로 사물을 확인하도록 요구합니다.


2
실제로 모든 것이 한 번에 디스크로 플러시되는 것은 아니므로 페이지를 닫았다가 다시 열면 최근에 저장 한 요소가 없을 수 있습니다. 나는 안드로이드의 하이브리드 앱에서 그것을 테스트했으며 어떤 경우에는 localStorage의 사용이 부적절하게 만듭니다.
user276648 2015-04-23

1
다른 페이지에 있어야하는 일부 개체를 저장해야합니다 LocalStorage. 가장 적절한 방법은 use 입니다. 10 개를 보관할 때 3 개를 놓쳤습니다. 나는 그것이 비동기 적이라고 정말로 믿지만 그것이 완료되었는지 확인하는 방법. 콜백을 어디에 추가해야합니까?
Adi Prasetyo

1
이 우연히이가에 추가 할 재미라고 생각 must, shall, mayRFC2119 위의 의견은 ietf.org/rfc/rfc2119.txt
mistertee

1
나는 또한 비동기와 같은 행동을보고있다. 빈 개체를 항목에 저장하면 항목의 데이터를 즉시 검색하면 저장하기 전에 이전 데이터가 반환되는 것을 알 수 있습니다. 내가 추측한다면 아마도 디스크 쓰기 지연 일뿐입니다
sookie

@sookie 운영 체제는 이와 같은 하드웨어 문제를 숨겨야합니다. 응용 프로그램은 디스크에서 직접 읽지 않고 운영 체제의 버퍼 캐시에서 읽습니다.
Barmar

-6

이 질문은 이미 답변되었습니다. 미래에이 문제에 대해 누구나 자바 스크립트는 본질적으로 동 기적입니다. 사물은 비동기식 일뿐입니다. 이 때문에 비동기로 지정되지 않는 한 모든 것이 동 기적이라고 가정 할 수 있습니다. 이것은 자바 스크립트로 작성된 프레임 워크가 아닌 자바 스크립트를 사용합니다. 그들은 때때로이 관행을 깨뜨립니다. NodeJ와 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.