Javascript 在web应用程序中从两个不同的web工作人员读取和写入同一个dexie js数据库

Javascript 在web应用程序中从两个不同的web工作人员读取和写入同一个dexie js数据库,javascript,web-worker,dexie,Javascript,Web Worker,Dexie,我正在开发一个web应用程序(使用webpack构建的vue),其中运行着两个不同的web工作者。一个是处理传入数据,另一个是处理传出数据 在这两种情况下,都需要执行读写操作 因为每个worker都在一个单独的线程上运行,并像这样调用它们 // in worker 1 const dbObj1 = new Dexie('my-db'); dbObj1.version(1).stores({...}); // in worker 2 const dbObj2 = new De

我正在开发一个web应用程序(使用webpack构建的vue),其中运行着两个不同的web工作者。一个是处理传入数据,另一个是处理传出数据

在这两种情况下,都需要执行读写操作

因为每个worker都在一个单独的线程上运行,并像这样调用它们

  // in worker 1
  const dbObj1 = new Dexie('my-db');
  dbObj1.version(1).stores({...});

  // in worker 2
  const dbObj2 = new Dexie('my-db');
  dbObj1.version(1).stores({...});
很可能会创造比赛条件

使用单例数据库对象也不起作用,因为线程是分开的


是否有任何方法可以访问两个Worker中的dexie数据库而不会出现问题?

第一个问题,是否有必要或更好,是否有必要让两个Worker并行运行,同时尝试交互和访问同一数据存储?尽管如此,这是一个很好的问题,我很好奇其他人会怎么说,我有自己的观点,但我需要更多地了解具体问题,然后才能证明我有理由分享我的想法。:)@从技术角度来看,它不是绝对必要的。但是,如果可以在工作人员级别分离传入和传出功能,即不紧密耦合它们,那么它将允许与其他工作人员重新组合,因为所需的内容存在一些变化。如果遇到紧急情况,我可以解决这个问题,但如果我可以有单独的工作线程——事实上甚至超过两个——这将是最干净的解决方案。我不完全确定您希望如何解决这个问题,但就我个人而言,我会选择一个简单的解决方案,因此在主执行线程中使用一些包装器,例如。PS我并不是建议你使用它,这是我为了好玩而做的。。但回到这一点上,我会在线程
y
达到
'complete'
阶段后运行线程
x
,从理论上讲,这将避免您担心竞争条件,但我认为这不适合实现:)我喜欢这样。我来试试。太棒了,我希望它能解决你的问题!:)