我正在制作一些使用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
};
};
};
答案 0 :(得分:2)
您的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的内容。