创建一个 indexedDB 并创建一个对象存储
Creating an indexedDB and creating an object store
我一直在研究 tutorial 如何使用 indexedDB。它建议以下代码。
dbreq = window.indexedDB.open('testaaaaa');
dbreq.onupgradeneeded = function(event){
var db = event.target.result;
var objectStore = db.createObjectStore("cats");
console.log("hi");
}
VM321:5 hi
如果我将它们粘贴到 Javascript 控制台 together.But 然后如果我尝试单独输入它们:
dbreq = window.indexedDB.open('testbbbbb');
然后:
dbreq.onupgradeneeded = function(event){
var db = event.target.result;
var objectStore = db.createObjectStore("cats");
console.log("hi");
}
没有输出。
所以这种设置数据库的方式在技术上会产生竞争条件,尽管这不太可能被击中。有没有更好的方法来创建不这样做的对象存储?
JavaScript 具有所谓的 "run to completion" 语义。这意味着执行不会在执行代码块到 运行 同一上下文中的其他代码的中间被中断。所以这很好,因为它发生在一个区块中:
// make the request
var request = indexedDB.open( ... );
// hook up the event listener
request.onupgradeneeded = function(e) { ... };
// hook up another event listener
request.onsuccess = function(e) { ... };
事件 不会触发 直到到达整个 JS 块的末尾,所以没有竞争。在幕后可能有一个 "upgradeneeded" 事件排队等候被调度,但直到整个 JS 代码块完成它才会。
当您分别键入行时,您将其分成多个块,您是对的:事件返回与您键入第二行代码的速度之间存在竞争。 (而且您可能打字速度不够快,无法赢得比赛!)
我一直在研究 tutorial 如何使用 indexedDB。它建议以下代码。
dbreq = window.indexedDB.open('testaaaaa');
dbreq.onupgradeneeded = function(event){
var db = event.target.result;
var objectStore = db.createObjectStore("cats");
console.log("hi");
}
VM321:5 hi
如果我将它们粘贴到 Javascript 控制台 together.But 然后如果我尝试单独输入它们:
dbreq = window.indexedDB.open('testbbbbb');
然后:
dbreq.onupgradeneeded = function(event){
var db = event.target.result;
var objectStore = db.createObjectStore("cats");
console.log("hi");
}
没有输出。
所以这种设置数据库的方式在技术上会产生竞争条件,尽管这不太可能被击中。有没有更好的方法来创建不这样做的对象存储?
JavaScript 具有所谓的 "run to completion" 语义。这意味着执行不会在执行代码块到 运行 同一上下文中的其他代码的中间被中断。所以这很好,因为它发生在一个区块中:
// make the request
var request = indexedDB.open( ... );
// hook up the event listener
request.onupgradeneeded = function(e) { ... };
// hook up another event listener
request.onsuccess = function(e) { ... };
事件 不会触发 直到到达整个 JS 块的末尾,所以没有竞争。在幕后可能有一个 "upgradeneeded" 事件排队等候被调度,但直到整个 JS 代码块完成它才会。
当您分别键入行时,您将其分成多个块,您是对的:事件返回与您键入第二行代码的速度之间存在竞争。 (而且您可能打字速度不够快,无法赢得比赛!)