【发布时间】:2016-10-13 22:22:31
【问题描述】:
我在另一个question 中被告知有关检测阻止和解除阻止事件“阻止的打开(或删除)未被取消,只是......被阻止。一旦解除阻止,打开(或删除)将继续进行。”
我想知道应用程序应该如何响应被阻止的事件,如果成功事件之后的路径最终仍然会发生。
如果我希望我的应用快速响应,并且遇到阻塞事件,我应该取消成功路径吗?通过路径,我指的是在成功打开数据库的情况下执行的一系列语句和函数调用和延续。
之前我假设阻塞事件阻止了成功路径的继续。我已经编写了我的应用程序,将阻塞事件视为类似于错误,这意味着操作无法继续,并且应该报告错误,然后执行其他操作或返回空闲状态。
对我来说问题是,如果成功事件最终可以继续,那么这意味着我正在分叉,并且错误路径和成功路径都会评估,并且可能会导致一些不需要的行为。
或者我最初的理解是正确的,我不需要担心取消onsuccess发生的事情,因为如果onblocked触发了那么我可以安全地推断onsuccess不会。
做下面这样的事情感觉真的很难看,但这是唯一能立即想到的避免我的问题的方法。
var r indexedDB.open(...);
var wasPreviouslyBlocked = false;
r.onsuccess = function() {
// Cancel the success if previously blocked
if(wasPreviouslyBlocked) {
return;
}
// Proceed as normal
doNextThing();
};
r.onblocked = function() {
wasPreviouslyBlocked = true;
};
有没有更好的方法来应对这种情况?
【问题讨论】:
-
我的理解是
block事件不应该被接收,只要在升级事件的情况下关闭所有连接。
标签: indexeddb