Czy setItem(key,value)
funkcja jest asynchroniczna?
localStorage.setItem("key",someText);
Czy setItem(key,value)
funkcja jest asynchroniczna?
localStorage.setItem("key",someText);
Odpowiedzi:
Nie, wszystkie localStorage
połączenia są synchroniczne.
nbf
lub exp
z niego.
Tak właściwie. magazyn sieciowy nie jest już częścią podstawowego standardu HTML5, został oddzielony.
Odpowiednią (roboczą) specyfikację można znaleźć tutaj, a jedyną rzeczą, którą zauważysz, jest to, że nigdzie nie wspomina o synchronizacji ani asynchroniczności.
Jednak analiza tekstu sugerowałaby, że musi on być synchroniczny (moje pogrubienie):
Metoda setItem (klucz, wartość) musi najpierw sprawdzić, czy para klucz / wartość z podanym kluczem już istnieje na liście skojarzonej z obiektem.
Jeśli tak nie jest, do listy należy dodać nową parę klucz / wartość z podanym kluczem i wartością ustawioną na wartość.
Jeśli dany klucz istnieje na liście, a jego wartość nie jest równa wartość, to musi mieć zaktualizowaną wartość do wartości. Jeśli jej poprzednia wartość jest równa value, metoda nie może nic zrobić.
W normach, jak słowa must
, shall
i may
przeprowadzić bardzo konkretne znaczenie. Fakt, że mówi o tym, co metoda musi zrobić, oznacza, że sama metoda musi to zrobić, a nie odkładać na jakiś czas później.
Dotyczy to również zdrowego rozsądku. Gdyby setItem
były asynchroniczne, możliwe byłoby ustawienie elementu na określoną wartość, a następnie natychmiastowe pobranie go, uzyskując jego poprzednią wartość.
Na dole sekcji interfejsu pamięci znajduje się uwaga, która wskazuje na możliwość zachowania asynchronicznego:
Ta specyfikacja nie wymaga, aby powyższe metody czekały, aż dane zostaną fizycznie zapisane na dysku. Wymagana jest tylko spójność w tym, jakie różne skrypty uzyskujące dostęp do tej samej podstawowej listy par klucz / wartość widzą.
Jednak dotyczy to tylko tego, co zostało zapisane w pamięci długoterminowej. Ostatnie zdanie nakazuje, aby skrypty korzystające z tego samego obiektu pamięci masowej widziały rzeczy synchronicznie.
LocalStorage
. Kiedy przechowuję 10 pozycji, brakuje mi 3 z nich. Naprawdę wierzę, że jest asynchroniczny, ale jak sprawdzić, czy tak się stało. gdzie mam dodać oddzwonienie?
must
, shall
, may
komentarz powyżej RFC2119 ietf.org/rfc/rfc2119.txt
Na to pytanie już udzielono odpowiedzi. Dla każdego, kto przyjdzie do tego w przyszłości, javascript jest z natury synchroniczny. Rzeczy są tylko asynchroniczne, jeśli zostały określone, aby to robić. Z tego powodu możesz założyć, że wszystkie rzeczy są synchroniczne, chyba że są określone jako asynchroniczne. Dotyczy to javascript, a nie frameworków napisanych w Javascript. Czasami łamią tę praktykę. Podobnie jak NodeJs.