将结果从indexeddb事务传递给调用函数

时间:2014-10-25 08:08:11

标签: indexeddb

我有以下方法从对象库中获取项目:

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?

1 个答案:

答案 0 :(得分:2)

您无法以这种方式返回数组。您需要了解如何编写异步JavaScript。例如,如何使用回调函数indexedDB openCursor transaction onsuccess returns empty array

这是一个关于用JavaScript编写的问题,而不是indexedDB。