IndexedDB返回值延迟

时间:2016-05-26 03:39:06

标签: javascript html5 indexeddb

我有一个小的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存储的对象,在控制台中输出对象,但是当返回request.result时,它会返回无用的东西。 我可以看到有很多关于异步操作的问题,包括Deffered函数,但考虑到我对javascript的有限知识,我似乎无法掌握它,所以如果有人可以请我解释如何返回找到的价值.onsuccess

1 个答案:

答案 0 :(得分:0)

如果您在项目中使用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);
});
相关问题