Первое, что вам нужно сделать, это создать индекс на поле revision
.
Тогда вам нужна функция поиска, которая будет использовать этот индекс и открыть индекс с обратным порядком объектов. Тогда первым объектом будет объект, который вы ищете.
var index = objectStore.index('revision');
index.openCursor(null, 'prev');
Нулевые гласит, что вы ищете для всех значений не одной конкретной, и вторым параметром является направление поиска.
Вот пример код:
function getMaxNumber (callback) {
var openReq = indexedDB.open(baseName);
openReq.onsuccess = function() {
var db = openReq.result;
var transaction = db.transaction(objectStoreName, 'readonly');
var objectStore = transaction.objectStore(objectStoreName);
var index = objectStore.index('revision');
var openCursorRequest = index.openCursor(null, 'prev');
var maxRevisionObject = null;
openCursorRequest.onsuccess = function (event) {
if (event.target.result) {
maxRevisionObject = event.target.result.value; //the object with max revision
}
};
transaction.oncomplete = function (event) {
db.close();
if(callback) //you'll need a calback function to return to your code
callback(maxRevisionObject);
};
}
}
Поскольку IndexedDB
апи является асинхронным вам потребуется функция обратного вызова для возврата значения в код.
Большое спасибо !!! Я не думал об использовании направления курсора. Очень круто! – alexpods
Еще один вопрос: почему бы не просто вызвать callback в openCursorRequest.onsuccess прослушиватель? Важно ли это назвать после db.close()? – alexpods
Нет, Алекс, это именно то, как я использую API, поскольку большую часть времени я повторяю несколько значений с помощью события onsuccess и возвращаю значения в событии «oncomplete». В вашем случае было бы быстрее вернуть значение в событии onsuccess. –