因此,我第一次使用dexie.js和IndexedDB构建了一个支持离线的小应用程序。如果本地机器上已经存在数据库,我希望打开并使用现有的数据库->所以我检查使用Dexie.exists()是否已经存在数据库。借用样本代码从Dexie.js wiki,我添加了以下内容到我的应用程序(而不是登录到控制台,我正在测试警报)
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");
});然而,这个代码--直接从样本中提取--对我不起作用。如果数据库不存在,代码将正确返回警报"Database不存在“。但是,在进行测试时,我以前创建了一个数据库,然后使用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")
);弹出警报"Oops,在尝试检查数据库存在时发生错误“。不幸的是,我不知道错误是什么,也不知道为什么只有在删除匿名函数时catch()语句才能工作。
看看Dexie.exists()的代码,它会测试是否可以open()数据库。据我所知,试图打开我删除的数据库似乎以类似于Dexie.exists()失败的方式失败。似乎我以前删除数据库时搞错了什么,现在Dexie不起作用了。因为Dexie很好地结合了承诺,所以我看不到我所假设的任何错误正在生成。
我花了大约8个小时试图解决这个问题,但没有结果。如果有人有使用Dexie.js的经验,并能为我指出正确的方向,我将非常感激。或者,如果有人有使用IndexedDB的经验,也许我可以通过‘重置’本地IndexedDB来解决问题(如果我在测试时确实搞砸了一些事情)。不过,我还没有找到一种方法来做到这一点(据我所知,直接使用IndexedDB是痛苦的)。
非常感谢您对此的帮助!
发布于 2016-04-10 11:53:00
所以你的.catch(alert())正在返回一个假阴性..。即使承诺兑现了也会显示出警报..。从你所说的看来,这个承诺是没有解决的,因此仍然处于一个悬而未决的状态。清除浏览器的缓存将有帮助。像这样
https://stackoverflow.com/questions/36524460
复制相似问题