javascript - 从indexedDB检索数据并将值返回给函数调用

标签 javascript indexeddb

我在异步的 JavaScript 函数之间共享变量。其中一个是主线程,另一个是基于事件的。我想在事件完成时返回值。

这是代码:

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的知识。一般来说,调用回调函数的函数是void(它们返回未定义的值)。如果您想一起使用两个回调函数的结果,那么您将需要将它们链接起来,以便在第一个函数(调用其回调函数)完成后,回调函数调用第二个函数,然后第二个函数调用第二个回调。所以涉及到四个函数调用。您需要将处理逻辑放置在连续回调函数的上下文中,而不是在函数外部继续逻辑并尝试使用其返回值。

换句话说,不要尝试这样做:

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 - 从indexedDB检索数据并将值返回给函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38352470/

相关文章:

javascript - jQuery 到 Javascript 的转换

javascript - 如何从 javascript 警报调用 php 函数

javascript - 使用工具提示进行 jQuery ASP 输入验证

javascript - Firefox 中索引数据库的无效状态错误

javascript - 为离线 Web 应用程序存储图像数据(客户端存储数据库)

javascript - 从 CSS 模块中访问全局类

javascript - 使用 jQuery 显示/隐藏 Bootstrap Accordion 面板

angular - 德克西和 Angular 4 : slow performance when selecting items

javascript - 如何使用自动增量键更新 IndexedDB 项?

javascript - 将大量字符串存储到 IndexedDB 中