我有以下方法从对象库中获取项目:
self.getSpecificFromDB = function(a, b, c, callback) {
self.trans = self.db.transaction(['do'], 'readonly');
self.store = self.trans.objectStore('do');
var items = [];
var cursorRequest = self.store.openCursor();
cursorRequest.onerror = function (event) {
console.log("Cursor error");
};
cursorRequest.onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
if (cursor.value.test == a) {
console.log("found it");
items.push(cursor.value);
}
cursor.continue();
}
};
callback(items);
};
我想在viewmodel的调用方法中使用item中返回的数组:
self.search = function() {
console.log("search called");
var resultarray = self.dbinstance.getSpecificFromDB(self.t(), self.d(), self.g(), function(elem) { console.log(elem);});
console.log(resultarray);
if (resultarray != undefined && resultarray.length > 0) {
self.searchitems.push({
general: resultarray[0].test,
two: resultarray[0].test2,
three: resultarray[0].test3
});
} else {
self.errormessagediv("Nothing was found");
}
};
回调本身有效,但是即使我使用类似function (item) { return item; }
之类的回调作为回调,结果阵列也总是未定义的。如何将结果提供给我的viewmodel?
答案 0 :(得分:2)
您无法以这种方式返回数组。您需要了解如何编写异步JavaScript。例如,如何使用回调函数indexedDB openCursor transaction onsuccess returns empty array。
这是一个关于用JavaScript编写的问题,而不是indexedDB。