javascript - IDB:openCursor() 不是函数
问题描述
好吧,也许我做错了什么......但是这个错误非常令人困惑。我坚持:“未捕获的 TypeError:requestChatHistory.openCursor 不是 IDBOpenDBRequest.dbPromise.onsuccess 的函数”
IDBOpenRequest 可能从 IDBRequest 继承方法...
我试图在没有 openCursor() 的情况下发出请求并从中获取第一个值。还尝试重新创建数据库,使用不同的浏览器(Chrome、Edge、Firefox)
onUpgrade 承诺:
dbPromise.onupgradeneeded = function(event) {
let db = event.target.result;
db.createObjectStore('keys', {keyPath: 'userId'});
let chatHistory = db.createObjectStore('messages', { keyPath: "id", autoIncrement:true });
chatHistory.createIndex("chatId", "chatId", { unique: false });
};
我的功能有要求:
async function loadSavedMessages(chatId){
let dbPromise = idb.open('clientDB', 3);
dbPromise.onsuccess = function() {
let db = this.result;
let dbTransaction = db.transaction(["messages"]);
let messages = dbTransaction.objectStore("messages");
let index = messages.index('chatId');
let requestChatHistory = index.get(chatId);
requestChatHistory.openCursor().onsuccess = function(event) {
let cursor = event.target.result;
if (cursor) {
console.log(cursor);
cursor.continue();
}
};
}
}
保存数据的功能:
async function saveMessage(chatId, message, userId){
let dbPromise = idb.open('clientDB', 3);
dbPromise.onsuccess = function() {
let db = this.result;
let dbTransaction = db.transaction(["messages"], 'readwrite');
let messages = dbTransaction.objectStore("messages");
let mesObj = {
chatId: chatId,
user: userId,
message: message,
timestamp: Date.now()
};
let save = messages.add(mesObj);
save.onerror = function(event) {
// Handle errors!
console.log("Something went wrong with local DB :(")
};
save.onsuccess = function(event) {
// Do something with the request.result!
console.log(`Message saved, id ${save.result}`);
};
}
}
解决方案
这是你的问题:
let requestChatHistory = index.get(chatId);
requestChatHistory.openCursor().onsuccess = function(event) {
requestChatHistory
是一个IDBRequest
,它没有openCursor
方法。openCursor
是 on IDBIndex
,就像你的index
变量一样。所以也许你打算做类似的事情:
index.openCursor(chatId).onsuccess = function(event) {
推荐阅读
- python - 有没有办法在 Python 中将列表列表转换为没有其他列表的列表?
- machine-learning - Top-k 和平均平均精度之间的关系是什么?
- java - Conferenceable 中没有可用的默认构造函数
- python - 不断请求输入,直到输入满足多个条件
- c# - 从另一个 MDIChild 表单显示 MDIChild 表单
- python - 如何在tensorflow函数中传递字典数据
- android - 我的第一个安卓应用有什么问题?
- python-3.x - 你如何直接从 GitHub 存储库安装一些东西?
- regex - Powershell 正则表达式组正则表达式匹配但没有我的组。少了什么东西?
- javascript - 从javascript中的字典数组中删除元素