- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
多个 IndexedDB 文档讲述了以下初始化数据库和创建一个 ObjectStore 的顺序。
1) request = window.indexedDB.open(...)
2) request.onsuccess = ...;
3) request.onupgradeneeded = ...
但是我发现如果步骤(3)在一段时间后完成,它不会被执行。
这是测试代码:
var db;
var request = window.indexedDB.open("birds-db", 1);
const startTime = new Date().getTime();
const simulatedDelay = 300;
function deltaTime() {
return new Date().getTime() - startTime;
}
request.onerror = function(event) {
console.log('error: ' + event);
};
request.onsuccess = function(event) {
console.log('onsuccess was called T' + deltaTime());
db = event.target.result;
};
setTimeout(function() {
console.log('after waiting ' + simulatedDelay + " miliseconds T" + deltaTime());
request.onupgradeneeded = function(event) {
console.log('onupgradeneeded was called T' + deltaTime());
var db = event.target.result;
var objectStore = db.createObjectStore("birds", {
keyPath: "sci_name"
});
};
}, simulatedDelay);
console.log("end " + deltaTime());
在上面的示例中,如果将 SimulatedDelay 设置为 300 毫秒,大多数情况下一切都会顺利进行,显示如下:
end 1
after waiting 300 miliseconds T302
onupgradeneeded was called T474
onsuccess was called T479
但是将其设置为 2000 或更多会导致:
end 0
onsuccess was called T602
after waiting 2000 miliseconds T2001
并且“onupgradeneeded”根本没有被调用。我的浏览器是 Firefox 60。
当然,如果我在“打开”之后设置“onupgradeneeded”,则不会出现问题。
在更复杂的情况下,如何确保 onupgradeneeded 始终在事件发生之前设置?
最佳答案
除非您同步设置事件处理程序,否则这是一个竞争条件。如果在事件触发之前设置了事件处理程序,则回调函数。否则,不会。
在实践中,您应该始终同步设置这些事件处理程序,因为竞争条件非常令人困惑。
关于javascript - IndexedDB 如何确保在事件发生之前添加 IDBOpenDBRequest.onupgradeneeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490788/
我试图在我的索引数据库中插入数据,但从未调用函数 onupgradeneed,只是调用成功。数据库的版本总是相同的(它是一个全局变量)。我知道为了进入 onupgradeneed 版本必须始终相同。就
在我的应用中,用户应该能够动态创建和删除 objectStores。感谢indexedDB,这个操作(这到底是为什么)只被允许在onupgradeneeded中。 触发onupgradedneeded
我的代码如下(通常是众所周知的对象的命名约定): var DBOpenRequest = window.indexedDB.open("messages", 6); //... DBOpenReque
我收到的错误是: Uncaught InvalidStateError: Failed to execute 'createObjectStore' on 'IDBDatabase': The dat
多个 IndexedDB 文档讲述了以下初始化数据库和创建一个 ObjectStore 的顺序。 1) request = window.indexedDB.open(...) 2) request.
我正在尝试使用 IndexedDB 获取本地存储的一些数据。下面我有一个简单的示例,我试图用它来触发 onupgradeneeded 事件 var indexedDB =
我正在使用 IndexedDB对于一个测试项目。下面是一些示例代码: var indexedDB = window.indexedDB || window.webkitIndexedDB
我在使用 IndexedDB 时遇到问题。在 Firefox 18 上,当我创建一个新数据库时,onsuccess 方法被同时调用了 onupgradeneeded。在 Chrome 24 上(这是我
已经有这样的问答 Add Index to Pre-Existing ObjectStore In IndexedDB Using Javascript 但我看不出该代码如何满足 setVersion
我是一名优秀的程序员,十分优秀!