HTML5 localStorage eşzamansız mı?


Yanıtlar:


157

Hayır, tüm localStoragearamalar eşzamanlıdır.


5
Orijinal kaynağım Mozilla yerel depolama dokümanlarıydı, ancak o zamandan beri revize edilmiş gibi görünüyorlar (ve W3 spesifikasyonu hiçbir yerde senkronizasyon / asenkron gerektirmiyor gibi görünüyor). Bu noktada, yerel depolama çağrılarının kurallara göre senkronize olduğunu, ancak spesifikasyonlara göre olmadığını söyleyebilirim. Zaman uyumsuz uygulayan bir tarayıcının farkında değilseniz?
Ryan Nigro

36
benim sorunum, yerel depolamada bir kimlik doğrulama belirteci ayarlamam ve ardından kullanıcıyı başka bir görünüme yönlendirmem. Bazen yeni görünümde yerel depolama, jetonun henüz kaydedilmediğini bulur, bu nedenle bir zaman aşımı kullanmam gerekiyor, ancak yine de% 100 güvenilir değil.
Kek Adam

@TheMuffinMan: Sorununuz büyük olasılıkla yetkilendirme belirteciyle ilgilidir nbfveya kimlikten expkaynaklanmaktadır.
Mendes

3
Benim için aynısı, garip şeyler
patotoma

Aynı problemle karşı karşıyayım ... bu tuhaf bir davranış.
Daniel T. Sobrosa

62

Aslında. web depolama artık HTML5 temel standardının bir parçası değildir, bölünmüştür.

İlgili (taslak) spesifikasyon burada bulunabilir ve fark edeceğiniz tek şey, herhangi bir yerde senkronize veya asenkrondan bahsetmemesidir.

Bununla birlikte, metnin analizi eşzamanlı olması gerektiğini önerecektir (kalın harfim):

SetItem (anahtar değeri) yöntemi verilen anahtar ile bir anahtar / değer çifti zaten nesnesi ile ilişkili listede olup olmadığını ilk kontrol gerekir.

Aksi takdirde , verilen anahtarla ve değeri değer olarak ayarlanmış olarak listeye yeni bir anahtar / değer çifti eklenmelidir .

Verilen anahtar listede mevcutsa ve değeri değere eşit değilse , değerinin değere güncellenmesi gerekir . Önceki değeri değerine eşitse, yöntem hiçbir şey yapmamalıdır.

Standartlar olarak, kelimeler gibi must, shallve maytaşımak çok özel anlamları. Yöntemin ne yapması gerektiğinden bahsediyor olması, onu daha sonraki bir zamana ertelemek yerine, yöntemin kendisinin yapması gerektiği anlamına gelir.

Bu aynı zamanda sağduyu da erteliyor. Eğer setItemasenkron vardı onun önceki değer elde, onu hemen ardından belirli bir değere bir öğe ayarlamak almak mümkün olacaktır.


Orada olan asenkron davranış olasılığı ima depolama arabirimi bölümünün altındaki bir not:

Bu belirtim, yukarıdaki yöntemlerin verilerin fiziksel olarak diske yazılmasını beklemesini gerektirmez. Yalnızca anahtar / değer çiftlerinin aynı temel listesine erişen farklı komut dosyalarının gördüklerinde tutarlılık gereklidir.

Ancak, bu yalnızca uzun vadeli depolamaya yazılanlar açısından. Son cümle, aynı depolama nesnesine erişen komut dosyalarının işleri eşzamanlı olarak görmek için gerekli olduğunu belirtir.


2
Aslında, her şeyin bir defada diske aktarılması gerekmez, bu nedenle sayfanızı kapatıp tekrar açarsanız, depoladığınız en son öğelere sahip olmayabilirsiniz. Bunu Android'de hibrit bir uygulamada test ettim ve bazı durumlarda localStorage kullanımını uygunsuz hale getiriyor.
user276648

1
farklı bir sayfada tutmam gereken bazı nesneleri saklamam gerekiyor, en uygun olanı kullanım LocalStorage. 10 ürün sakladığımda 3 tanesini özlüyorum. Gerçekten eşzamansız olduğuna inanıyorum, ama yapılıp yapılmadığını nasıl kontrol edeceğim. geri aramayı nereye eklemeliyim?
Adi Prasetyo

1
Bu girdi ve sonra bu eklemek için ilginç olduğunu düşündüm must, shall, mayRFC2119 yukarıdaki yorum ietf.org/rfc/rfc2119.txt
mistertee

1
Aynı zamanda asenkron benzeri davranışlar da görüyorum. Bir öğeye boş bir nesneyi kaydettiğimde, öğenin verilerini hemen geri alırken kaydetmeden önce eski verileri döndürdüğünü fark ettim. Tahmin edecek olsaydım, muhtemelen sadece diske yazma gecikmesidir
sookie

@sookie İşletim sistemi bunun gibi donanım sorunlarını gizlemelidir. Uygulamalar doğrudan diskten değil, işletim sisteminin arabellek önbelleğinden okunur.
Barmar

-6

Bu soru zaten cevaplandı. Gelecekte buna gelen herkes için javascript doğası gereği eşzamanlıdır. Şeyler yalnızca eşzamansızdır, biz bunu yapmak için belirtildik. Bu nedenle, eşzamansız olarak belirtilmedikçe her şeyin eşzamanlı olduğunu varsayabilirsiniz. Bu, Javascript ile yazılmış, Javascript ile yazılmış çerçevelerle değil. Bazen bu uygulamayı bozarlar. NodeJ'ler gibi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.