使用 YDN-DB 的 IndexedDB:如何确定对象存储是不是存在

Posted

技术标签:

【中文标题】使用 YDN-DB 的 IndexedDB:如何确定对象存储是不是存在【英文标题】:IndexedDB using YDN-DB: How to determine if an object store exists使用 YDN-DB 的 IndexedDB:如何确定对象存储是否存在 【发布时间】:2014-08-15 20:45:13 【问题描述】:

将 IndexedDB 用于本地 html5 应用程序,特别是 YDN-DB 包装器,我经常需要使用动态获取的商店名称来查询商店。 当商店不存在时,我会出现错误,并且 javascript 执行中止。错误看起来像这样:

Uncaught ydn.error.ArgumentException: Store "client_store" not found. 

当然,我知道商店不存在,但我怎样才能最好地编写代码来更优雅地“捕捉”这个错误? 谢谢。

【问题讨论】:

【参考方案1】:

你可以使用这个小实用功能:

function storeExists(name) 
    var exists = false;

    db.getSchema().stores.forEach(function (store) 
        if (store.name === name) 
            return exists = true;
        
    );

    return exists;

执行

storeExists('client_store');

【讨论】:

【参考方案2】:

最好的办法是避免动态更改数据库架构。

您还可以通过签入架构db.getSchema().stores.contains('new store') 来检查商店名称是否存在。

【讨论】:

谢谢@Kyaw 的回答。但是,这并没有太大帮助(还没有!)。 db.getSchema().stores 返回一个包含所有商店的数组,但每个商店都是一个对象,您必须查询 name 属性。遍历它们以获取if(store_exists) 似乎并不简单。所以现在,我选择的路径是:确保每个可能的存储都已经存在于模式中(如果脚本要请求它),即使它还不需要存储。尽管如此,我非常感谢您一贯的支持。

以上是关于使用 YDN-DB 的 IndexedDB:如何确定对象存储是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

YDN-DB 仅从我的 IndexedDb 存储中获取前 100 行

为 angularjs 创建一个 ydn-db 服务

在 Firefox Jetpack 插件中使用 ydn-db

是否可以知道 ydn-db 的 put 操作的进度?

YDN-DB - 删除数据库,然后在页面加载/重新加载时重新创建和加载,但在刷新时不加载

如何使用 YDN-DB 在 keypath 之后获取下一个元素