索引数据库打开不触发任何回调
Indexed db open not trigger any callback
我们遇到了问题。
当我们尝试打开索引数据库时 none 的回调被触发。
我们正在执行以下步骤:
1.open 使用以下步骤的数据库:
request = indexedDB.open(name, 10);
request.onerror = onError;
request.onsuccess = onSuccess;
request.onupgradeneeded = onUpgradeNeeded;
request.onblocked=onBlocked;<br>
2.notice none 回调被触发
3.open chrome://indexeddb-internals/# 它显示之前的删除数据库正在等待处理。
您可能打开了另一个与数据库有连接的选项卡。
Open/delete 个请求进入队列。未指定版本(或指定与当前数据库相同的版本)的打开请求在到达队列前端时可以立即处理。对更高版本的打开请求或到达队列前端的删除请求必须等待所有其他连接关闭。如果他们在收到 "versionchange" 后立即关闭,则请求继续。如果不是,则请求获得 "blocked" 事件并等待连接关闭。
请注意,队列中的其他请求不会收到事件 - 它们只是在等待,直到它们到达队列的前面并得到处理或 "blocked"
在第 3 步中,您报告之前有一个待处理的删除请求。这表明它被某些东西阻塞了;大概还有另一个连接。所以删除请求在队列的前面 "blocked",而你的打开请求(对于版本 10)在队列中位于它的后面,并且(正如你所注意到的)在它发出之前它不会看到事件它排在队列的前面。
尽管 Joshua Bell 的回答是正确的,但我想补充一点(基于他的回答 :) blocked = upgradeBlocked(只有当您有保持连接打开策略并且您的应用程序打开时间超过 1 时才会发生选项卡,您尝试在一个选项卡中升级您的架构,但另一个选项卡中的其他打开连接不会在 versionchange 事件上关闭,该事件也会在那里触发...因此升级被阻止)并且您的代码似乎被 queueBlocked 但您没有听那个。
我自己为请求实现了超时,所以我总是知道超时、成功、升级和成功或错误在超时提供的时间范围内触发。我假设阻塞永远不会发生,因为我总是在版本更改时关闭连接。
当然,我猜好的代码通常不会遇到超时。所以这是为了完美的运行时处理。如果您经常遇到超时,则问题的根源在其他地方。所以拥有 onBlockedUpgrade 和 onBlockedQueue 并没有什么帮助。像 xhr 那样内置超时会很棒:)
但是很高兴知道来自 Joshua Bell 的这个“队列问题”:) 你最好实现超时,在这个具体案例中你应该在别处找到问题。
我们遇到了问题。
当我们尝试打开索引数据库时 none 的回调被触发。
我们正在执行以下步骤:
1.open 使用以下步骤的数据库:
request = indexedDB.open(name, 10);
request.onerror = onError;
request.onsuccess = onSuccess;
request.onupgradeneeded = onUpgradeNeeded;
request.onblocked=onBlocked;<br>
2.notice none 回调被触发
3.open chrome://indexeddb-internals/# 它显示之前的删除数据库正在等待处理。
您可能打开了另一个与数据库有连接的选项卡。
Open/delete 个请求进入队列。未指定版本(或指定与当前数据库相同的版本)的打开请求在到达队列前端时可以立即处理。对更高版本的打开请求或到达队列前端的删除请求必须等待所有其他连接关闭。如果他们在收到 "versionchange" 后立即关闭,则请求继续。如果不是,则请求获得 "blocked" 事件并等待连接关闭。
请注意,队列中的其他请求不会收到事件 - 它们只是在等待,直到它们到达队列的前面并得到处理或 "blocked"
在第 3 步中,您报告之前有一个待处理的删除请求。这表明它被某些东西阻塞了;大概还有另一个连接。所以删除请求在队列的前面 "blocked",而你的打开请求(对于版本 10)在队列中位于它的后面,并且(正如你所注意到的)在它发出之前它不会看到事件它排在队列的前面。
尽管 Joshua Bell 的回答是正确的,但我想补充一点(基于他的回答 :) blocked = upgradeBlocked(只有当您有保持连接打开策略并且您的应用程序打开时间超过 1 时才会发生选项卡,您尝试在一个选项卡中升级您的架构,但另一个选项卡中的其他打开连接不会在 versionchange 事件上关闭,该事件也会在那里触发...因此升级被阻止)并且您的代码似乎被 queueBlocked 但您没有听那个。
我自己为请求实现了超时,所以我总是知道超时、成功、升级和成功或错误在超时提供的时间范围内触发。我假设阻塞永远不会发生,因为我总是在版本更改时关闭连接。
当然,我猜好的代码通常不会遇到超时。所以这是为了完美的运行时处理。如果您经常遇到超时,则问题的根源在其他地方。所以拥有 onBlockedUpgrade 和 onBlockedQueue 并没有什么帮助。像 xhr 那样内置超时会很棒:)
但是很高兴知道来自 Joshua Bell 的这个“队列问题”:) 你最好实现超时,在这个具体案例中你应该在别处找到问题。