Индексированная БД получает все значения, переменная не присваивает значения - Асинхронная ошибка
Я пытаюсь получить все данные из indexeddb с помощью следующей функции.
var databasehandler={}
databaseHandler.getAllContacts=function(callback){
var resultarray = new Array;
var objectStore = db.transaction(databaseHandler.TABLE_CONTACTS).objectStore(databaseHandler.TABLE_CONTACTS);
var keyRange = IDBKeyRange.lowerBound(0);
objectStore.openCursor(keyRange).onsuccess = function(event) {
var cursor = event.target.result;
//console.log("valueee:"+event.target.result);
if (cursor) {
resultarray.push(cursor.value);
//console.log("Name for id " + cursor.key + " is " + cursor.value.name + ", Age: " + cursor.value.age + ", Email: " + cursor.value.email);
cursor.continue();
} else {
console.log("No more entries!");
}
};
callback(resultarray);
}
и вызвать функцию, используя
var allcontacts;
databaseHandler.getAllContacts( function(data){allcontacts=data});
if(allcontacts.length>0){
console.log('higher' +allcontacts[0]);
}else{console.log('lower');
}
поэтому мне нужно получить длину всех данных. если 3 данные там, он должен напечатать выше и первые данные.. но я получаю
TypeError: allcontacts is undefined[Learn More]
я знаю.onsuccess - это асинхронная функция, поэтому я попытался вызвать метод обратного вызова. и даже я пытался использовать "$.Deferred()", как это:
databaseHandler.getAllContacts=function(){
var resultarray = new Array;
var defer = $.Deferred();
var objectStore = db.transaction(databaseHandler.TABLE_CONTACTS).objectStore(databaseHandler.TABLE_CONTACTS);
var keyRange = IDBKeyRange.lowerBound(0);
objectStore.openCursor(keyRange).onsuccess = function(event) {
var cursor = event.target.result;
//console.log("valueee:"+event.target.result);
if(!!cursor == false) {
// Send the information back to our specified function
// Callback(resultarray);
defer.resolve(resultarray);
return
}
resultarray.push(cursor.value);
cursor.continue();
};
}
но тот тоже не сработал. пожалуйста, предоставьте решение для этого.. обратный вызов не работает эффективно. пожалуйста, дайте мне знать, что я что-то упустил? я использовал следующий код также.. вызовы для функций были сделаны соответственно.
databaseHandler.getAllContacts=function(Callback){
var resultarray = new Array;
var defer = $.Deferred();
var objectStore = db.transaction(databaseHandler.TABLE_CONTACTS).objectStore(databaseHandler.TABLE_CONTACTS);
var keyRange = IDBKeyRange.lowerBound(0);
objectStore.openCursor(keyRange).onsuccess = function(event) {
var cursor = event.target.result;
//console.log("valueee:"+event.target.result);
if(!!cursor == false) {
// Send the information back to our specified function
Callback(resultarray);
return
}
resultarray.push(cursor.value);
cursor.continue();
};
}