HTML5 लोकलस्टोरीज अतुल्यकालिक है?


जवाबों:


158

नहीं, सभी localStorageकॉल सिंक्रोनस हैं।


5
मेरा मूल स्रोत मोज़िला लोकलस्टोरेज डॉक्स था, लेकिन ऐसा लगता है कि वे तब से संशोधित किए गए हैं (और डब्ल्यू 3 कल्पना में कहीं भी सिंक / एसिंक्स की आवश्यकता नहीं है)। इस बिंदु पर, मैं कहूंगा कि स्थानीय कॉल कॉनवेंट सम्मेलन द्वारा तुल्यकालिक हैं, लेकिन कल्पना से नहीं। जब तक आप उस ब्राउज़र के बारे में नहीं जानते हैं जो इसे async लागू करता है?
रयान निगारो

35
मेरी समस्या यह है कि मैंने एक स्थानीय टोकन को स्थानीय संग्रहण में सेट किया है, और फिर उपयोगकर्ता को किसी अन्य दृश्य पर पुनर्निर्देशित किया है। कभी-कभी नए दृश्य एक्सेस पर स्थानीय संग्रहण पाता है कि टोकन अभी तक सहेजा नहीं गया था, इसलिए मुझे टाइमआउट का उपयोग करना होगा, लेकिन अभी भी 100% विश्वसनीय नहीं है।
मफिन मैन

@ TheMuffinMan: आपकी समस्या संभवतः nbfया expटोकन से संबंधित है ।
Mendes

3
मेरे लिए एक ही, अजीब सामान
patotoma

मैं एक ही समस्या का सामना कर रहा हूँ ... एक अजीब व्यवहार।
डैनियल टी। सोब्रोसा

62

वास्तव में। वेब संग्रहण HTML5 कोर मानक का हिस्सा नहीं है, इसे अलग कर दिया गया है।

प्रासंगिक (ड्राफ्ट) विनिर्देश यहां पाया जा सकता है और एक बात जो आप नोटिस करेंगे, वह यह है कि यह कहीं भी तुल्यकालिक या अतुल्यकालिक का उल्लेख नहीं करता है।

हालाँकि, पाठ के विश्लेषण से यह पता चलेगा कि यह समकालिक (मेरा बोल्ड) होना चाहिए:

SetItem (कुंजी, मूल्य) विधि पहले जांच करना चाहिए, तो किसी कुंजी के साथ एक मुख्य / मान जोड़े को पहले से ही वस्तु के साथ जुड़े सूची में मौजूद है।

यदि ऐसा नहीं होता है, तो एक नई कुंजी / मूल्य जोड़ी को सूची में जोड़ा जाना चाहिए, दिए गए कुंजी के साथ और इसके मूल्य के मूल्य के साथ सेट करें।

यदि दी गई कुंजी सूची में मौजूद है, और इसका मूल्य मूल्य के बराबर नहीं है, तो इसका मूल्य के लिए अद्यतन मूल्य होना चाहिए । यदि इसका पिछला मान मान के बराबर है, तो विधि को कुछ भी नहीं करना चाहिए।

मानकों में, जैसे शब्द must, shallऔर बहुत विशिष्ट अर्थ mayले जाते हैं। तथ्य यह है कि यह किस विधि के बारे में बात कर रहा है इसका मतलब यह है कि विधि को स्वयं इसे करना चाहिए, इसे बाद के कुछ समय के लिए स्थगित नहीं करना चाहिए।

यह सामान्य ज्ञान को भी प्रभावित करता है। यदि setItemअतुल्यकालिक थे, तो एक आइटम को एक विशिष्ट मूल्य पर सेट करना संभव होगा, फिर तुरंत इसे पुनः प्राप्त करें, इसके पिछले मूल्य को प्राप्त करना।


वहाँ है भंडारण इंटरफ़ेस अनुभाग जो अतुल्यकालिक व्यवहार करने की संभावना पर संकेत के तल पर एक ध्यान दें:

इस विनिर्देश की आवश्यकता नहीं है कि उपरोक्त तरीके तब तक प्रतीक्षा करते हैं जब तक कि डेटा डिस्क पर भौतिक रूप से नहीं लिखा गया हो। केवल कुंजी / मूल्य जोड़े की समान अंतर्निहित सूची तक पहुँचने वाली विभिन्न लिपियों में क्या स्थिरता है, यह आवश्यक है।

हालाँकि, यह केवल उस चीज़ के संदर्भ में है जो दीर्घकालिक भंडारण के लिए लिखी गई है। अंतिम वाक्य यह बताता है कि समान भंडारण वस्तु तक पहुँचने वाली स्क्रिप्ट को चीजों को समकालिक रूप से देखना आवश्यक है।


2
वास्तव में चीजें एक बार में डिस्क पर फ्लश नहीं की जाती हैं, इसलिए यदि आप बंद करते हैं तो फिर से अपना पृष्ठ खोलें, आपके पास आपके द्वारा संग्रहीत नवीनतम तत्व नहीं हो सकते हैं। मैंने परीक्षण किया है कि एंड्रॉइड में एक हाइब्रिड ऐप में, और यह कुछ मामलों में लोकलस्टोरेज के उपयोग को अनुपयुक्त बनाता है।
user276648

1
मुझे कुछ ऑब्जेक्ट स्टोर करने की आवश्यकता है जो मुझे अलग-अलग पृष्ठ में हैं, सबसे उपयुक्त उपयोग है LocalStorage। जब मैं 10 आइटम संग्रहीत करता हूं, तो मुझे उनमें से 3 की याद आती है। मैं वास्तव में विश्वास करता हूं कि यह अतुल्यकालिक है, लेकिन अगर यह किया जाए तो कैसे जांचें। मुझे कॉलबैक कहां जोड़ना है?
आदि प्रसादो

1
इस पर ठोकर खाई और सोचा कि यह करने के लिए जोड़ने के लिए दिलचस्प था must, shall, mayRFC2119 ऊपर टिप्पणी ietf.org/rfc/rfc2119.txt
mistertee

1
मैं एसिंक्रोनस जैसा व्यवहार भी देख रहा हूं। जब मैं किसी वस्तु को किसी खाली वस्तु को सहेजता हूं, तो मैं ध्यान देता हूं कि आइटम के डेटा को तुरंत प्राप्त करने के बाद बचत करने से पहले पुराना डेटा वापस कर देता है। अगर मुझे लगता है, यह शायद डिस्क पर लिखने की देरी है
सूकी

@ सूकी ऑपरेटिंग सिस्टम को किसी भी हार्डवेयर मुद्दे को छुपाना चाहिए। ऑपरेटिंग सिस्टम के बफर कैश से पढ़े गए एप्लिकेशन, डिस्क से सीधे नहीं।
बरमार

-6

इस सवाल का जवाब पहले ही दिया जा चुका है। जो कोई भी भविष्य में इसके लिए आता है, उसके लिए जावास्क्रिप्ट प्रकृति द्वारा तुल्यकालिक है। चीजें केवल async हैं हम ऐसा करने के लिए निर्दिष्ट हैं। इस वजह से, आप यह मान सकते हैं कि सभी चीजें सिंक्रोनस हैं जब तक कि वे async निर्दिष्ट नहीं हैं। यह जावास्क्रिप्ट के साथ है, जावास्क्रिप्ट में लिखे गए फ्रेमवर्क नहीं। वे कई बार इस प्रथा को तोड़ते हैं। नोडजे की तरह।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.