У меня есть некоторые данные в таблице IndexedDB, что довольно просто содержит эти данные:Как получить данные таблицы IndexedDB в переменную?
var Customers = [
{ ssn: "123-45-6666", name: "Andrew", age: 22, email: "[email protected]" },
{ ssn: "555-66-7777", name: "Gail", age: 25, email: "[email protected]" }
];
Я тогда эту функцию, чтобы получить данные обратно из индексированной:
function RetrieveTableRows(Table) {
var returnData = [];
var db = window.indexedDB.db;
var trans = db.transaction([Table], "readwrite");
var store = trans.objectStore(Table);
var keyRange = IDBKeyRange.lowerBound(0);
var cursorRequest = store.openCursor(keyRange);
cursorRequest.onerror = window.indexedDB.onerror;
cursorRequest.onsuccess = function(e) {
var result = e.target.result;
if(!!result == false) {
return;
}
returnData.push(result.value);
result.continue();
};
return returnData;
}
Я понимаю, что это не потому что функция onsuccess асинхронна, но я не могу решить проблему.
Просто я хочу, чтобы иметь возможность написать:
var myCustomers = RetrieveTableRows('customers');
и быть в состоянии затем использовать переменную myCustomers - возможно ли это?
Я попытался с помощью JQuery.deferred();
метод, но это, похоже, не работает, и я знаю, что я мог бы сделать что-то вроде этого:
transaction.oncomplete = function() {
ReturnTableRows(returnData);
};
}
function ReturnTableRows(data) {
//do something with the array of data
}
, но я не могу работать, как передать это обратно к переменной myCustomers
.
я сделал именно это в моем предыдущем тестировании отложенного метода, но я получаю ошибки. Хотя, пересмотрев это, я обнаружил, почему я получаю эту ошибку - например, вы удалили поле «return» в операторе 'if (!! result == false)'. –
Я добавил возврат в код, чтобы я мог принять ваш ответ - спасибо! :) –
хорошие уловки – Quince