Ich habe Variable zwischen JavaScript-Funktion, die asynchron ist. Einer von ihnen ist Hauptfaden und ein anderer ist ereignisbasiert. Ich möchte den Wert zurückgeben, wenn das Ereignis abgeschlossen ist.Abrufen von Daten aus indexedDB und Rückgabewert zum Funktionsaufruf
Dies ist der Code:
completeExecution = false; // Shared Variable (Global Variable)
indexDBdata = {}; // Shared Variable (Global Variable)
function getPermission(key) {
var permission_data={};
if(exist_in_local) {
indexdbConnection.getRecordByKey('userPermission',permitKey,function(data){
indexDBdata=data; // Before its complete function return value
});
} else {
// make ajax call & its working fine
}
return permission_data;
}
// Daten von IndexedDB
bekommengetRecordByKey:function(tableName,key,readRecords){
if(isEmptyOrNull(readRecords)){
console.log("callback function should not be empty");
return;
}
if(isEmptyOrNull(tableName)){
console.log("table name should not be empty");
return;
}
var returnObj={};
var isSuccessfull=false;
if(this.dbObject.objectStoreNames.contains(tableName)){
var transaction=this.dbObject.transaction(tableName);
var objectStore = transaction.objectStore(tableName);
objectStore.get(key).onsuccess = function(event) {
returnObj=event.target.result;
};
**//Return object after this events compelte**
transaction.oncomplete = function(evt) {
completeExecution=true;
indexDBdata=returnObj;
readRecords(returnObj);
};
transaction.onerror = function(evt) {
completeExecution=true;
indexDBdata={status:'404'};
readRecords("Table Not found");
};
} else {
completeExecution=true;
indexDBdata={status:'404'};
readRecords("Table Not found");
}
}
Problem ist, während Daten von IndexedDB Abrufen es gibt immer {}
(leeres Objekt). Ich möchte den Ereignis-Thread und den Haupt-Thread synchronisieren oder auf den Abschluss des Ereignisses warten. Ich möchte DOM bei Callbacks nicht direkt manipulieren, ich muss Wert zurückgeben.
Wenn Sie eine Lösung für das obige Problem oder einen anderen Trick haben, dann bitte helfen Sie mir.
Vielen Dank im Voraus.
'zwischen Javascript threads' ..., was Sie tun bedeuten? JavaScript ist nicht multi-threaded. –