Dexie.exists()方法什么都不返回(Dexie.js& IndexedDB)

时间:2016-04-10 00:45:25

标签: javascript indexeddb dexie

所以我第一次使用dexie.js和IndexedDB构建了一个支持离线支持的小应用。如果本地计算机上已存在数据库,我想打开并使用该现有数据库 - >所以我使用Dexie.exists()检查是否已存在该数据库。借用Dexie.js wiki中的sample code,我已将以下内容添加到我的应用中(而不是登录到控制台,我正在使用警报进行测试)

Dexie.exists("myDatabase").then(function(exists) {
  if (exists)
    alert("Database exists");
  else
    alert("Database doesnt exist");
}).catch(function (error) {
    alert("Oops, an error occurred when trying to check database existence");
});

然而,这段代码 - 直接取自样本 - 对我不起作用。如果数据库不存在,则代码正确返回警报"数据库不存在"。但是,在测试时,我先前创建了一个数据库,然后使用db.delete()将其删除。现在,当我测试我删除的数据库的存在时,没有返回任何内容。它应该返回"数据库不存在",或者至少是一个错误,但它没有。我发现如果我将代码更新为以下内容:

Dexie.exists("myDatabase").then(function(exists) {
  if (exists)
    alert("Database exists");
  else
    alert("Database doesnt exist");
}).catch(
    alert("Oops, an error occurred when trying to check database existence")
);

警报"糟糕,尝试检查数据库存在时发生错误"会弹出来的。不幸的是,我不知道错误是什么,我不知道为什么catch()语句仅在删除匿名函数时才起作用。

查看Dexie.exists()的代码,它会测试它是否可以open()有问题的数据库。据我所知,尝试打开我删除的数据库似乎失败的方式类似于Dexie.exists()失败的方式。看起来我可能在尝试删除数据库之前弄乱了一些东西,现在Dexie还没有工作。由于Dexie融合了承诺的能力,我无法看到我所假设的任何错误。

我花了大约8个小时试图解决这个问题现在无济于事。如果有人有使用Dexie.js的经验并且可以指出我正确的方向,我会非常感激它。或者,如果有人有使用IndexedDB的经验,也许我可以通过重置'来解决问题。本地的IndexedDB(如果我确实在测试时搞砸了一些东西)。我已经找不到办法做到这一点(据我所知,直接使用IndexedDB很痛苦)。

SOOOO非常感谢您对此提供任何帮助!!

1 个答案:

答案 0 :(得分:1)

所以你的.catch(alert())正在返回假阴性......即使承诺结算,它也会显示警告......从你所说的那里看来承诺没有解决,因此保留在待定状态。清除浏览器的缓存将有所帮助。 Like This

相关问题