如何检查indexedDB实例是否打开?

2023-11-25

假设我有一个 indexedDB 对象的实例。有没有一种简单的方法来检测对象当前是否处于“打开”状态?

我试过了database.closePending并查看其他属性,但没有看到一个简单的属性来告诉我数据库的状态。

  • 我希望同步执行此操作。
  • 尝试在数据库上打开事务并检查是否发生异常之类的事情对我来说不是一个合理的解决方案。
  • 我不想维护与数据库实例关联的额外变量。

也许我缺少 api 中的一些简单功能?实例变量是否有一些可观察的特征,我可以快速轻松地查询以确定状态?

换句话说,您可以改进以下实现吗?

function isOpen(db) {
  if(db && Object.prototype.toString.call(db) === '[object IDBDatabase]') {
    var names = db.objectStoreNames();
    if(names && names.length) {
      try {
        var transaction = db.transaction(names[0]);
        transaction.abort();
        return true;
      } catch(error) {
      }
    }
  }
}

还是这个方法?

var opened = false;
var db;
var request = indexedDB.open(...);
request.onsuccess = function() {
  db = request.result;
  opened = true;
};

function isOpen(db) {
  return opened;
}

db.close();
opened = false;

还是这个方法?

var db;
var request = indexedDB.open(...);
request.onsuccess = function() {
  db = request.result;
  db.onclose = function() {
    db._secret_did_close = true;
  };
};

function isOpen(db) {
  return db instanceof IDBDatabase && !db.hasOwnProperty('_secret_did_close');
}

API 中没有其他内容可以告诉您连接是否已关闭。你列举的可能性就是可用的。

另请注意,没有closePendingAPI 中的属性。规范文本使用关闭待处理标志来表示内部状态,但这不会暴露给脚本。

尝试在数据库上打开事务并检查是否发生异常之类的事情对我来说不是一个合理的解决方案。

为什么?这是最可靠的方法。维护额外的状态不会导致意外关闭(例如,用户删除了浏览数据,强制连接关闭),尽管这就是onclose处理程序会考虑 - 您需要结合第二种和第三种方法。 (close不会被解雇,如果close()由脚本调用)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查indexedDB实例是否打开? 的相关文章

随机推荐

  • 未添加本机代码的 Java 致命错误 SIGSEGV

    我从 Java 编译器收到一条我不理解的错误消息 我已经使用 Java 6 和 7 在 OSX 10 6 10 9 和 Ubuntu 14 04 上测试了我的代码 当我使用 Eclipse 调试器或解释器 使用 Xint 选项 运行时 一切
  • Django 无法迁移 PostgreSQL:关系 Y 的约束 X 不存在

    我正在尝试在 PostgreSQL 9 6 5 数据库上运行 Django 1 11 迁移 但出现了奇怪的错误 Applying myapp 0011 auto 20171130 1807 Traceback most recent cal
  • sqlalchemy中的连接池是线程安全的吗?

    文档称连接池也不是为多线程设计的 至关重要的是 当使用连接池时 以及扩展时 使用通过 create engine 创建的引擎 连接不会与分叉进程共享 TCP 连接是 表示为文件描述符 通常跨进程工作 边界 这意味着这将导致对文件的并发访问
  • iPhone 应用程序无法在旧设备(3G、3GS...)上运行[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Xcode 4 2 和 iOS 5 SDK 时是否可以针对旧版 iOS 版本 我开发了一个适用于 iPhone 4 iOS 4 3 和 5 的应用程序 在开发过程中使用 现在我尝试在3GS iO
  • 您可以记录角度数据绑定错误吗?

    如果绑定属性或表达式失败 是否有办法记录 i e
  • 如何为 JBoss 实例设置代理

    我有一个正在运行的 JBoss 实例 我想通过代理路由所有流量 我尝试将系统属性设置为在 run sh 中加载 如下所示 JAVA OPTS Dhttp proxyHost localhost Dhttp proxyPort 1234 JA
  • 发送电子邮件而无需在 Google 中启用不太安全的应用程序

    我用 C 制作了一个电子邮件程序 但您必须在 google 中启用不太安全的应用程序 有没有解决的办法 如果不是 其他应用程序如何安全地发送电子邮件而不被归类为安全性较低的应用程序 private void SendButton Click
  • 聚合物多重继承/组合

    高分子网站says在 Polymer 中使用 extend 属性不支持多重继承 或组合 我希望一个元素由一个 Polymer 元素中的一些方法和另一个 Polymer 元素中的一些方法组成 以使其反映应用程序逻辑 目前有什么方法可以在 Po
  • 正则表达式替换除破折号之外的非单词

    我有一个正则表达式模式 W 不适合h e l l o w o r d 替换字符串为 它返回类似这样的内容 h w 我希望至少能看到这样的事情 h e l l o w o r d 如何替换所有非单词字符和 不包括 symbol 要匹配除破折号
  • 为什么 strtotime 在不同时区给出不同的结果?

    我不知道为什么strtotime 在 PHP 中 即使给出相同的日期作为参数 在不同的时区也会返回不同的结果 有人知道答案吗 我也想知道 我可以做类似的任务 转换datetime to an int轻松地进行计算 与另一个在不同时区给出相同
  • 如何为 SQL Server 数据库中的所有表创建触发器

    我有一个专栏LastUpdate在我数据库的所有表中 我想说 在插入更新时LastUpdate getdate 我可以使用触发器来做到这一点 但我发现很难为数据库的每个表编写数百个触发器 如何动态创建影响所有表的触发器 如何为每个表动态创建
  • 将数据从 php 传回给 ajax

    如何将数据从 php of then rows 传递回 ajax PHP query SELECT FROM picture order by rand LIMIT 10 result mysql query query while rec
  • Android 在 snapchat 上分享图片

    我使用此代码来分享分数的屏幕截图 Intent sharingIntent new Intent Intent ACTION SEND sharingIntent setType image png Uri image Uri parse
  • 如何编写 EF.Functions 扩展方法?

    我看到 EF Core 2 有 EF Functions 属性EF Core 2 0 公告 which can be used by EF Core or providers to define methods that map to da
  • 在 Python 3 中导入 Rosbag

    我正在尝试从 Python 3 读取 rosbag 文件 我安装了 ROS2 Eloquent Elusor 它应该支持 Python 3 当我跑步时 import rosbag bag rosbag Bag test bag 从Pytho
  • JavaScript 数组的 Big O

    JavaScript 中的数组很容易通过添加和删除项目来修改 它在某种程度上掩盖了这样一个事实 大多数语言数组都是固定大小的 并且需要复杂的操作来调整大小 JavaScript 似乎可以很容易地编写出性能不佳的数组代码 这就引出了一个问题
  • EditText 中的“自动换行:换行”

    android 有类似 css 的属性 word wrap 吗 我只是希望我的文本不被空格 破折号等包裹 如下所示 hello w orld 代替 hello world 不幸的是 android没有这个属性 但您可以使用 Replacem
  • 如何正确使用从 swagger 规范生成的服务器存根?

    我使用 Swagger 2 0 和 swagger codegen 实际上是 Maven 的 swagger codegen plugin 来指定 记录和生成 API 并以 Java 作为目标语言 该项目已设置为构建服务器存根 JAX RS
  • R 中的 file.path 函数

    我正在学习名为的函数file path in R 我想知道这个命令是否会像这样更改工作目录setwd 或者简单地给R文件的路径并仅更改工作区 提前致谢 file path 只是创建文件路径的一种便捷方法 它实际上根本不会进行任何导航 例如如
  • 如何检查indexedDB实例是否打开?

    假设我有一个 indexedDB 对象的实例 有没有一种简单的方法来检测对象当前是否处于 打开 状态 我试过了database closePending并查看其他属性 但没有看到一个简单的属性来告诉我数据库的状态 我希望同步执行此操作 尝试