创建indexedDB并创建对象库

时间:2017-10-09 10:35:11

标签: html html5 indexeddb

我一直在关注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控制台中,它就可以工作。但是如果我尝试单独输入它们的话:

dbreq = window.indexedDB.open('testbbbbb');

然后:

dbreq.onupgradeneeded = function(event){
    var db = event.target.result;
    var objectStore = db.createObjectStore("cats");
    console.log("hi");
}

没有输出。

因此,这种设置数据库的方式在技术上会产生竞争条件,尽管这种情况不太可能发生。有没有更好的方法来创建一个没有做到这一点的对象存储?

1 个答案:

答案 0 :(得分:1)

JavaScript具有所谓的“运行到完成”语义。这意味着在执行代码块的过程中不会中断执行,以在同一个上下文中运行其他代码。所以这很好,因为它发生在一个区块中:

pattern2

事件不会触发直到达到整个JS块的末尾,因此没有竞争。在幕后可能有一个“upgradeneeded”事件排队等待调度,但是直到整个JS代码块完成它才会发生。

当您单独键入行时,您将其拆分为多个块并且您是对的:事件返回与您键入第二行代码的速度之间存在竞争。 (你可能没有足够快的速度赢得比赛!)