2012-02-09 11 views
6

अनुक्रमित डीबी में spec है जिसमें कहा गया है कि आप अनुक्रमित डेटाबेस को समकालिक रूप से एक्सेस कर सकते हैं, लेकिन इसे अभी तक लागू नहीं किया गया है।मैं अनुक्रमित डीबी को समकालिक रूप से कैसे एक्सेस कर सकता हूं?

मैं सिर्फ अगर वहाँ इसे मैन्युअल रूप से तुल्यकालिक बनाने के लिए एक रास्ता है सोच रहा था,

मेरा JavaScript इस तरह दिखता है,

var trans = databaseAsync.transaction(["mapTile"], IDBTransaction.READ_WRITE); 
var store = trans.objectStore("mapTile"); 
var keyRange = IDBKeyRange.bound(evt.data[0], evt.data[0]); 
var cursorRequest = store.openCursor(keyRange); 

// can you put some kind of wait in here? 

cursorRequest.onsuccess = function(e) 
{ 
    var result = e.target.result; 
    if(!!result == false) 
    { 
    } 
} 

तो आप इसे onSuccess तक इंतजार करने के लिए वहाँ में कुछ डाल सकते हैं जारी रखने से पहले विधि को बुलाया गया है?

कारण है कि मैं इस कोड के ऊपर इस विधि के अंदर लपेटा जाता है है क्या करना चाहते हैं,

dojo.extend(esri.layers.ArcGISTiledMapServiceLayer, { 
     getTileUrl : function(level, row, col) 
     { 
      // blah 
      return url; 
     } 

तो यह किसी ESRI टाइल परत (जो अपने वेब पेज पर एक नक्शे पर टाइल लोड होगा) है, और उस विधि को सीधे एक विशेष टाइल के लिए यूआरएल वापस करने की जरूरत है। यह या तो, से अगर यह पहले से ही डेटाबेस में कैश नहीं है, या इस छवि को लोड करने के लिए एक URL होगा

data:image;base64,*BASE64DATA* 

कहाँ BASE64DATA डेटाबेस से डेटा अगर पहले से कैश की गई है।

मैं पहले इसके लिए स्थानीय स्टोरेज का उपयोग कर रहा था, जो सिंक्रनाइज़ रूप से काम करता है, लेकिन इसमें 5 एमबी सीमा है इसलिए मैंने सोचा कि मैं अनुक्रमित डीबी के साथ प्रयोग करूंगा।

उत्तर

2

पास अधिक सामान्य प्रश्न अतुल्यकालिक कार्यों जहां एक जवाब मिल जाएगा के लिए प्रतीक्षा करने के लिए कैसे नहीं है: How to block on asynchronous functions in JavaScript

मैं भी Trial Tool अंदर एक अच्छा waitFor दिनचर्या पाया।

0

आईई 10 सिंक एपीआई का समर्थन करता है, लेकिन इंडेक्सडेब सिंक एपीआई केवल वेब कार्यकर्ता के अंदर ही उपयोग किया जा सकता है। यदि आप यूआई थ्रेड में काम कर रहे हैं तो आपको एसिंक एपीआई का उपयोग करने की आवश्यकता है।

एसिंक एपीआई के साथ काम करने का सबसे आसान तरीका वादे के माध्यम से है।

+0

कृपया [अपनी पोस्ट में हस्ताक्षर या टैगलाइन जोड़ें न करें] (http://stackoverflow.com/faq#signatures)। – meagar

2

इंडेक्सड डीबी सिंक एपीआई IndexedDB specification का जोखिम भरा हिस्सा के रूप में चिह्नित किया गया है और कार्यान्वयन की संभावित कमी के कारण उन्हें हटा दिया जा सकता है।

मैं क्रियान्वित किया है 'सिंक' समाधान 'oncomplete' लेन-देन घटना है जो guaranties है कि मौजूदा कार्रवाई अगले प्रारंभ करने से पहले समाप्त हो गया है का उपयोग कर, और मैं भी कस्टम semaphore और queue तर्क जो जीयूआई से async कॉल हैंडल का उपयोग करें और यह सुनिश्चित करता है कि इंडेक्सड डीबी डेटाबेस की ओर 2 खुले कनेक्शन एक ही समय में नहीं होंगे।

+1

क्या इस पोस्ट में आपने जो भी बताया है उसका कोड कहीं भी उपलब्ध है? – dumbmatter

2

ऐसा करने का एक शानदार तरीका the accepted answer to this question I asked a couple months ago में प्रदान किया गया है। दुर्भाग्यवश, यह जावास्क्रिप्ट 1.7 (जेनरेटर) की सुविधा पर निर्भर करता है जो केवल फ़ायरफ़ॉक्स में समर्थित है। उम्मीद है कि कुछ दिन इस तकनीक को अधिक व्यापक रूप से समर्थित किया जाएगा।

संबंधित मुद्दे

 संबंधित मुद्दे