gpt4 book ai didi

javascript - indexedDB正确用法

转载 作者:行者123 更新时间:2023-12-02 16:58:06 25 4
gpt4 key购买 nike

我正在尝试使用indexedDB。现在一切都像是异步的,这对我的大脑造成了很大的伤害。

我创建了一个像这样的对象:

var application = {};
application.indexedDB = {};
application.indexedDB.db = null;

application.indexedDB.open = function() {

var dbName = "application";
var dbVersion = 1;

var openRequest = indexedDB.open(dbName, dbVersion);

openRequest.onupgradeneeded = function(e) {

console.log("Upgrading your DB (" + dbName + ", v" + dbVersion + ")...");

var thisDB = e.target.result;

if (!thisDB.objectStoreNames.contains("journal")) {
thisDB.createObjectStore(
"journal",
{keyPath: "id"}
);
}
}

openRequest.onsuccess = function(e) {
console.log("Opened DB (" + dbName + ", v" + dbVersion + ")");
application.indexedDB.db = e.target.result;
}

openRequest.onerror = function(e) {
console.log("Error");
console.dir(e);
}
};

现在我可以使用 application.indexedDB.open() 打开数据库连接。现在我向我的对象添加了另一个函数:

application.indexedDB.addItemToTable = function(item, table) {

var transaction = application.indexedDB.db.transaction([table], "readwrite");
var store = transaction.objectStore(table);

//Perform the add
var request = store.add(item);

request.onerror = function(e) {
console.log("Error", e.target.error.name);
//some type of error handler
}

request.onsuccess = function(e) {
console.log("Woot! Did it");
}
};

我的指令序列扩展如下:

  1. application.indexedDB.open()
  2. application.indexedDB.addItemToTable(item, "journal")

但这行不通。因为 open-Instruction 是异步的,所以当我在 addItemToTable-Function 中调用 application.indexedDB.db 时,它还不可用。Javascript 开发人员如何解决这个问题?

我在这里关注本教程:http://code.tutsplus.com/tutorials/working-with-indexeddb--net-34673现在我对这些例子有一些疑问。

例如,他直接在“onsuccess”部分(在“阅读更多数据”部分)中创建 HTML 输出。在我看来,这是糟糕的编码,因为 View 与数据库读取部分无关......不是吗?但接下来我的问题来了。你到底怎么能在“onsuccess”部分返回一些东西?添加回调函数有点复杂。特别是当我想读取一些数据并通过该结果集获取更多数据时。描述我的意思非常复杂。我做了一点 fiddle - 也许它澄清了事情.. -- http://jsfiddle.net/kb8nuby6/

谢谢

最佳答案

您不需要使用别人的额外程序。在使用 indexedDB 之前,您需要了解异步 javascript (AJAX)。没有办法避免它。您可以了解 AJAX,而无需了解 indexedDB。例如,看看 XMLHttpRequest 是如何工作的。了解 setTimeout 和 setInterval。也许了解 requestAnimationFrame。如果您了解 NodeJS,请查看 process.nextTick。了解函数如何成为一流的。了解使用回调函数的想法。了解连续传球风格。

您可能无法获得此问题所需的答案。如果有的话,这是堆栈溢出上有关 javascript 异步编程的数千个其他问题的重复。它甚至与indexedDB 没有什么关系。查看有关异步 js 的众多其他问题。

也许这可以让您开始:

var a;
setTimeout(function() { a = 1; }, 10);
console.log('The value of a is %s', a);

找出为什么不起作用。如果您这样做,您将更接近找到这个问题的答案。

关于javascript - indexedDB正确用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26003623/

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