【问题标题】:IndexedDB return value Deferred [duplicate]IndexedDB返回值延迟[重复]
【发布时间】:2016-05-26 03:39:06
【问题描述】:

我有一个小的 javascript 项目,我使用 indexedDB 来存储一些值。问题是 indexedDB 是异步的,我无法从 request.onsuccess 返回值。:

function read(email) {
    var transaction = db.transaction(["usuario"]);
    var objectStore = transaction.objectStore("usuario");
    var request = objectStore.get(email);

    request.onerror = function (event) {
        console.log("No se pudieron sacar los datos de la base de datos!");
    };

    request.onsuccess = function (event) {
        if (request.result) {
            console.log(request.result);
        }

        else {
            console.log(email + " no se encontro en la BD!");
            return true;
        }
    };
}

我正在尝试返回键存储的对象 email.console.log 在控制台中打印出该对象,但是当分配了 return request.result 时,它返回了无用的东西。 我可以看到这个站点中已经有很多关于异步操作的问题,包括延迟函数,但考虑到我对 javascript 的有限知识,我似乎无法掌握它,所以如果有人可以向我解释如何返回找到的价值.onsuccess

【问题讨论】:

    标签: javascript html indexeddb


    【解决方案1】:

    如果您在项目中使用 jQuery,那么您可以使用 jQuery 的 deferredJose on Code对此有很好的解释。

    function read(email) {
      var deferred = $.Deferred();
      var transaction = db.transaction(["usuario"]);
      var objectStore = transaction.objectStore("usuario");
      var request = objectStore.get(email);
    
      request.onerror = function(event) {
        console.log("No se pudieron sacar los datos de la base de datos!");
      };
    
      request.onsuccess = function(event) {
        if (request.result) {
          console.log(request.result);
          deferred.resolve(request.result);
        } else {
          console.log(email + " no se encontro en la BD!");
          return true;
        }
      };
      return deferred;
    }
    
    
    read(mail).done(function(value) {
      alert(value);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2015-11-12
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多