在我的web应用程序中,我在indexeddb中有一个项目队列,需要按顺序处理,然后从队列中删除,队列当前正在计时器上处理,每个项目可能需要几秒钟的时间来处理。如何防止多个选项卡同时处理队列?我考虑过在项目上设置一个状态,以指示它正在处理,但在选项卡/窗口中关闭,则项目将停留在该状态并阻塞队列。如何确保一个选项卡/窗口可以同时处理indexeddb中的队列?
rdlzhqv91#
如果处理需要几秒钟,听起来像是IndexedDB本身之外的异步工作(例如,一些网络请求、UI更新等),所以简单地使用IDB事务是不可行的。在这种情况下,请看一下Web Locks API https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API,它正是为这种跨选项卡协调而设计的,其级别高于数据库事务,每个选项卡都可以在需要工作时尝试获取锁;如果另一个选项卡有锁,回调将不会执行。2有锁的选项卡会持有锁,直到异步操作完成。底层操作(数据库、网络等)不会自动与锁定集成,因此您需要在适当的时间设置承诺解决方案,例如将IDB工作 Package 在承诺中。但是Web Locks API应该有助于整体协调,并且现在所有浏览器都可以使用它。
1条答案
按热度按时间rdlzhqv91#
如果处理需要几秒钟,听起来像是IndexedDB本身之外的异步工作(例如,一些网络请求、UI更新等),所以简单地使用IDB事务是不可行的。
在这种情况下,请看一下Web Locks API https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API,它正是为这种跨选项卡协调而设计的,其级别高于数据库事务,每个选项卡都可以在需要工作时尝试获取锁;如果另一个选项卡有锁,回调将不会执行。2有锁的选项卡会持有锁,直到异步操作完成。
底层操作(数据库、网络等)不会自动与锁定集成,因此您需要在适当的时间设置承诺解决方案,例如将IDB工作 Package 在承诺中。但是Web Locks API应该有助于整体协调,并且现在所有浏览器都可以使用它。