IndexedDB return 值延迟

IndexedDB return value Deferred

我有一个小的 javascript 项目,我使用 indexedDB 来存储一些 values.The 问题是 indexedDB 是异步的,我不能 return 来自 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;
        }
    };
}

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

如果您在项目中使用 jQuery,则可以使用 deferred 或 jQuery。 Jose 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);
});