gpt4 book ai didi

jquery - 在indexedDB中打开多个数据库连接是否不好?

转载 作者:行者123 更新时间:2023-12-03 23:06:53 25 4
gpt4 key购买 nike

我已经使用 IndexedDB 一段时间了,我可以成功创建一个新数据库,创建一个存储,并在“需要升级”期间添加一个值。我不明白的是,数据库是否保持“打开”状态,还是必须在需要访问数据库中读/写信息的每个函数内重新打开它?

例如,这是我的代码(有效)用于创建一个新数据库并插入一条记录:

$(document).ready(function() {

var db;

function initDB() {
console.log("opening db...");

var req = indexedDB.open(dbName, version);
req.onsuccess = function(event) {
db = this.result;
console.log("opening db is done");
}

req.onerror = function(event) {
console.log("error opening db: ", event.target.errorCode);
}

req.onupgradeneeded = function(event) {
db = event.target.result;
var store = db.createObjectStore("creds", { autoincrement: true });
store.add({ username:'none', password:'none'}, 1);
}
}

让我感到困惑的是,当我需要访问该数据库中的记录,或者添加更多记录,或者删除记录时,我以为我可以创建一个新函数并插入一些值。这就是我所拥有的(失败):

  function saveCreds() {
usr = $("#username").val();
psw = $("#password").val();

$.getJSON(baseURL + "cred-check/?callback=?", { username:usr, password:psw }, function(data) {
if (data.creds_good == 'true'); {
// NEXT LINE FAILS
var store = db.transaction(['creds'], 'readwrite').objectStore('creds');
var request = store.get(1);
request.onsuccess = function (event) {
var data = request.result;
data.username = usr;
data.password = psw;

var requestUpdate = store.put(data, 1);
requestUpdate.onerror = function(event) {
console.log("error putting value...");
}
}
}
});
}

这个saveCredsinitDB函数位于$(document).ready()函数和db内部code> 变量在 initDBsaveCreds 函数外部声明,但在 $(document)内部声明.ready() 所以我认为我的范围还可以。

问题是,db 变量未定义。我收到错误:无法调用未定义的“transaction”方法

这是否意味着对于每个需要访问数据库中数据的函数,我需要重新打开它,并将其重新分配给一个变量,以便我可以操作/读取数据库中的数据?

最佳答案

我的回答必须是:有时。不,您不需要总是打开新连接。您可以在一个连接上使用多个事务。执行此操作的一个简单方法是将 db 变量传递给这些函数。但是,您必须了解 javascript 以及 indexedDB 的异步特性。有时您需要打开一个新连接。例如,在某些其他事件的触发上。

因此,如果您正在进行多个事务,请使用如下所示的大型函数:

function domultiplethings() {
var db = ...
callfunction1(db);
callfunction2(db);
}

function callfunction1(db) {
if(!db) {
// open a new connection then call ourself
} else {
// active connection, do read/write stuff
}
}

关于jquery - 在indexedDB中打开多个数据库连接是否不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21418954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com