我在另一个关于检测阻止和解除阻塞事件的问题中被告知"阻止打开(或删除)未被取消,只是...被阻止.一旦解锁,打开(或删除)将继续."
我想知道应用程序应该如何响应被阻止的事件,如果有可能成功事件之后的路径仍然会发生,最终.
如果我希望我的应用快速响应并遇到阻止事件,我应该取消成功路径吗?通过路径,我指的是在成功打开数据库的情况下执行的一系列语句和函数调用和继续.
以前我认为被阻止的事件阻止了成功路径的继续.我已经编写了我的应用程序来处理阻塞事件,类似于错误,这意味着操作无法继续,并且应该报告错误,然后执行其他操作或返回空闲状态.
对我来说问题是,如果成功事件最终可以继续,那么这意味着我正在分叉,错误路径和成功路径都将进行评估,并可能导致一些不需要的行为.
或者我的初步理解是正确的,我不需要担心取消成功时发生的事情,因为如果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;
};
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来应对这种情况?
indexeddb ×1