जबकि IndexedDB की अद्भुत दुनिया के माध्यम से अपने रास्ते बना रही है, मैं मोज़िला टेस्ट स्वीट से this की तरह कोड भर में आया था:बताएं कि इस जावास्क्रिप्ट कोड में इंडेक्सड डीबी के साथ जनरेटर का उपयोग कैसे किया जाता है?
/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
var testGenerator = testSteps();
function testSteps()
{
const IDBObjectStore = Components.interfaces.nsIIDBObjectStore;
const name = this.window ? window.location.pathname : "Splendid Test";
const description = "My Test Database";
var data = [
{ name: "inline key; key generator",
autoIncrement: true,
storedObject: {name: "Lincoln"},
keyName: "id",
keyValue: undefined,
},
{ name: "inline key; no key generator",
autoIncrement: false,
storedObject: {id: 1, name: "Lincoln"},
keyName: "id",
keyValue: undefined,
},
{ name: "out of line key; key generator",
autoIncrement: true,
storedObject: {name: "Lincoln"},
keyName: undefined,
keyValue: undefined,
},
{ name: "out of line key; no key generator",
autoIncrement: false,
storedObject: {name: "Lincoln"},
keyName: null,
keyValue: 1,
}
];
for (let i = 0; i < data.length; i++) {
let test = data[i];
let request = mozIndexedDB.open(name, i+1, description);
request.onerror = errorHandler;
request.onupgradeneeded = grabEventAndContinueHandler;
let event = yield;
let db = event.target.result;
let objectStore = db.createObjectStore(test.name,
{ keyPath: test.keyName,
autoIncrement: test.autoIncrement });
request = objectStore.add(test.storedObject, test.keyValue);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
let id = event.target.result;
request = objectStore.get(id);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
// Sanity check!
is(test.storedObject.name, event.target.result.name,
"The correct object was stored.");
request = objectStore.delete(id);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
// Make sure it was removed.
request = objectStore.get(id);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield;
ok(event.target.result === undefined, "Object was deleted");
db.close();
}
finishTest();
yield;
}
उनके अन्य परीक्षण, एक समान शैली में लिखे गए हैं के रूप में कयामत की ठेठ "पिरामिड करने का विरोध किया "शैली जिसे आप इंडेक्सड डीबी के साथ देखते हैं, एसिंक्रोनस कॉलबैक को एक साथ रखा जा रहा है (और, ज़ाहिर है, जनरेटर फ़ायरफ़ॉक्स से व्यापक रूप से समर्थित नहीं हैं ..)।
तो, मोज़िला से यह कोड कुछ हद तक आकर्षक और दिलचस्प है क्योंकि यह बहुत साफ दिखता है, लेकिन मुझे पूरा यकीन नहीं है कि yield
इस संदर्भ में क्या कर रहा है। क्या कोई इसे समझने में मेरी सहायता कर सकता है?
मैं किस तरह का विवरण प्रदान कर सकता हूं? – buley
मुझे पूरी तरह से यकीन नहीं है। मैं अभी भी वास्तव में समझ में नहीं आता कि क्या हो रहा है। संदर्भ के लिए, [यहां वह जगह है जहां grabEventAndContinueHandler परिभाषित किया गया है] (http://hg.mozilla.org/mozilla-central/file/895e12563245/dom/indexedDB/test/helpers.js)। क्या यह किसी भी तरह से कह रहा है "जब आप 'उपज' रेखा पर जाते हैं, तब तक प्रतीक्षा करें जब तक कि ईवेंट समाप्त नहीं हो जाता"? कैसे? – dumbmatter
इसके अलावा, आपके मूल उत्तर और आपके अन्य इंडेक्सड डीबी उत्तरों के लिए धन्यवाद। आप दुनिया के कुछ लोगों में से एक हैं जो वास्तव में इस बारे में लिख रहे हैं कि इसका उपयोग कैसे किया जाना चाहिए, ऐसा लगता है। – dumbmatter