gpt4 book ai didi

javascript - IndexedDB 请求和事务的计时

转载 作者:行者123 更新时间:2023-12-02 21:05:34 25 4
gpt4 key购买 nike

我正在阅读 IndexedDB(关于 developers.google.comMDN )。据我所知,做任何事情的通常模式是

  1. 创建一个请求对象,
  2. 添加 onsuccess、onerror 以及可能更多的回调
  3. 没有 3。

然后,该请求最终会执行其操作并调用我的函数之一(或者如果使用包装器,则达成一个 promise )。 我缺少某种 promise 步骤。鉴于请求的实现是异步的,这是否意味着它可以在不同的线程上发生?如果是这样,如果它真的很快(或者我的代码真的很慢)并且在我设置回调之前设法在 1 到 2 之间终止怎么办?

或者请求会在空闲期间在同一个线程上运行吗?如果是这样,我可以想象我会压垮请求队列(比如在一个非常低调的设备上)。如果回调不是一个选项(我的函数仍在运行),将如何发出信号?

最佳答案

诸如 put 或 add 之类的写入请求会将要完成的工作附加到创建它的事务中。写入请求在其事务提交时提交。检测到没有更多请求需要处理后不久就会提交事务。

关于提交的含义有点复杂,因为我认为 Firefox 和 Chrome 有不同的含义,或者在过去的某个时刻,Chrome 在内存中提交,然后刷新到磁盘,但 Firefox 没有提交直到刷新到磁盘,或者向后提交,抱歉。然而,刷新到磁盘可能是迂腐/任意的,所以我不会担心这种区别。尤其是当您不熟悉事物时。

要检测事务何时提交,请监听事务的完成事件。

要检测事务何时因错误而回滚且未提交,请监听事务的错误事件。这里还有一个奇怪的注释,事务不具有错误属性,只有请求具有。因此,事务级别的错误事件将对应于其请求之一的错误。

要检测事务何时成功完成,请监听完成事件和错误事件。

JavaScript 是单线程的。 indexedDB 为您管理线程等。您无需担心线程。

如果您非常慢的代码在请求期间终止,则事务将无法成功完成。数据库将处于与启动请求之前相同的状态,就好像请求从未发生过一样。

如果您的代码在第一个请求完成之后但在同一事务中的后续请求完成之前终止,那么速度非常慢的代码将无法成功完成。仅当事务的所有请求都成功完成时,该事务才成功完成。因此,数据库将处于与启动第一个请求之前相同的状态,就好像事务中没有任何请求发生一样。

如果indexedDB由于某种性能压力错误而无法完成事务,那么相关事务基本上不会提交,并且不会发生持久状态更改。这将被视为某种更一般的 JavaScript 错误,或者性能允许,只是一个正常的事务错误。

关于javascript - IndexedDB 请求和事务的计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61234501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com