【问题标题】:Indexeddb - Prevent multiple tabs/windows accessing item at the same timeIndexeddb - 防止多个选项卡/窗口同时访问项目
【发布时间】:2023-02-04 05:44:59
【问题描述】:

在我的 web 应用程序中,我在 indexeddb 中有项目队列,需要按顺序处理然后从队列中删除,队列当前正在计时器上处理,每个项目可能需要几秒钟的时间来处理。

如何防止多个选项卡同时处理队列?

我考虑过在项目上设置一个状态以指示它正在处理,但在选项卡/窗口中关闭然后项目将卡在该状态并阻止队列。

我如何确保在一个选项卡/窗口上可以一次处理 indexeddb 中的队列?

【问题讨论】:

    标签: indexeddb


    【解决方案1】:

    如果处理需要几秒钟,这听起来像是涉及 IndexedDB 本身之外的异步工作(例如一些网络请求、UI 更新等)。所以简单地使用 IDB 事务是不可行的。

    在这种情况下,请查看 Web Locks API https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API,它专为这种交叉表协调而设计,处于比数据库事务更高的级别。每个选项卡都可以在需要工作时尝试抢锁;如果另一个选项卡有锁,则不会执行回调。具有锁的选项卡会一直持有它,直到异步操作完成。

    底层操作(数据库、网络等)不会自动与锁定集成,因此您需要设置在正确时间发生的承诺解决方案,例如将 IDB 工作包装在承诺中。但是 Web Locks API 应该有助于整体协调,而且现在所有浏览器都可以使用它。

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      相关资源
      最近更新 更多