我正在制作一些使用indexdDB的原型应用程序,但我不知道如何创建可重用的函数。
例如,我想创建可重用的函数来检索LOV值。我知道应该通过事件以某种方式创建它,但是我不知道该如何做。
谁能帮忙吗?
以下是我想带入生活的代码
function parent(){
var lovValues = getLovValuesByType("STORE_TYPE");
//lovType now is undefined
};
function getLovValuesByType(lovType){
var returnedLovValues = new Array();
var t = db.transaction(["LST_OF_VAL"], "readonly");
var objectStore = t.objectStore("LST_OF_VAL");
var INDEX = objectStore.index("TYPE");
var REQUEST = INDEX.openCursor(IDBKeyRange.only(lovType));
REQUEST.onsuccess = function() {
var CURSOR = REQUEST.result;
if (CURSOR) {
var value = this.result.value.VAL;
returnedLovValues.push(value);
this.result.continue();
} else {
return returnedLovValues; /// <------return data
};
};
};
最佳答案
您的return
语句从回调函数REQUEST.onsuccess
返回。您没有从getLovValuesByType
返回任何内容,这就是为什么lovValues
未定义的原因。
最直接的解决方案是使用回调函数:
getLovValuesByType("STORE_TYPE", function (lovValues) {
//lovType now is defined
);
function getLovValuesByType(lovTypem, cb){
var returnedLovValues = new Array();
var t = db.transaction(["LST_OF_VAL"], "readonly");
var objectStore = t.objectStore("LST_OF_VAL");
var INDEX = objectStore.index("TYPE");
var REQUEST = INDEX.openCursor(IDBKeyRange.only(lovType));
REQUEST.onsuccess = function() {
var CURSOR = REQUEST.result;
if (CURSOR) {
var value = this.result.value.VAL;
returnedLovValues.push(value);
this.result.continue();
} else {
cb(returnedLovValues);
};
};
};
更一般而言,您可能需要阅读一些有关异步JavaScript的内容。
关于javascript - indexedDB可重用功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22053419/