Javascript 从indexedDB检索数据并将值返回给函数调用
我有一个javascript函数之间的共享变量,它是异步的。其中一个是主线程,另一个是基于事件的。我想在事件完成时返回值 代码如下:Javascript 从indexedDB检索数据并将值返回给函数调用,javascript,indexeddb,Javascript,Indexeddb,我有一个javascript函数之间的共享变量,它是异步的。其中一个是主线程,另一个是基于事件的。我想在事件完成时返回值 代码如下: completeExecution = false; // Shared Variable (Global Variable) indexDBdata = {}; // Shared Variable (Global Variable) function getPermission(key) { var permission
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;
}
//从IndexedDB获取数据
getRecordByKey: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");
}
}
问题是当从indexedDB检索数据时,它总是返回{}
(空对象)。我想同步事件线程和主线程,或者等待事件完成。我不想在回调时直接操作DOM,我必须返回值
若你们有上述问题的解决方案或任何其他技巧,那个么请帮助我
提前谢谢 我觉得这个问题不是很清楚,但是如果我理解了,那么您需要学习更多关于编写异步javascript的知识。通常,调用回调函数的函数是无效的(它们返回未定义的值)。如果要将两个回调函数的结果一起使用,则需要将它们链接起来,以便在第一个函数调用其回调函数完成后,回调函数调用第二个函数,然后第二个函数调用第二个回调函数。因此涉及到四个函数调用。您将希望将处理逻辑放在后续回调函数的上下文中,而不是在函数外部继续逻辑并尝试使用其返回值 换句话说,与其尝试这样做,不如:
function a() {}
function b() {}
var aresult = a();
var bresult = b(aresult);
// processing of both a and b
您可能希望尝试执行以下操作:
function a(acallback) {
acallback(...);
}
function b(bcallback) {
bcallback(...);
}
a(function(...) {
b(function(...) {
// all processing of both a and b
});
});
javascript线程之间的
。。。什么意思?JavaScript不是多线程的。Josh Beam我不明白你的意思,你能给我一个非常简单的例子吗?!